首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 88:合併兩個有序數組(逆向雙指針原地合併)

     編輯:關於C++

題目描述

給定兩個已排序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 中,使 nums1 成為有序數組。nums1 有足夠空間容納所有元素(大小 ≥ m+n)。

逆向雙指針

從 nums1 有效部分末尾(m-1)和 nums2 末尾(n-1)開始,比較大小,將較大者放入 nums1 末尾(m+n-1),對應指針前移。這樣避免了數據前移覆蓋問題。

代碼實現 (C++)

class Solution {
public:
    void merge(vector& nums1, int m, vector& nums2, int n) {
        int i = m - 1, j = n - 1, k = m + n - 1;
        while (j >= 0) {
            nums1[k--] = (i >= 0 && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
        }
    }
};

複雜度

  • 時間:O(m+n)
  • 空間:O(1)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved