?目錄鏈接:
力扣編程題-解法匯總_分享+記錄-CSDN博客
GitHub同步刷題項目:
https://github.com/September26/java-algorithms
原題鏈接:力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺
描述:
給你兩個按?非遞減順序?排列的整數數組?nums1
?和?nums2
,另有兩個整數?m
?和?n
?,分別表示?nums1
?和?nums2
?中的元素數目。
請你?合并?nums2
?到?nums1
?中,使合并后的數組同樣按?非遞減順序?排列。
注意:最終,合并后數組不應由函數返回,而是存儲在數組?nums1
?中。為了應對這種情況,nums1
?的初始長度為?m + n
,其中前?m
?個元素表示應合并的元素,后?n
?個元素為?0
?,應忽略。nums2
?的長度為?n
?。
示例 1:
輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 輸出:[1,2,2,3,5,6] 解釋:需要合并 [1,2,3] 和 [2,5,6] 。 合并結果是 [1,2,2,3,5,6] ,其中斜體加粗標注的為 nums1 中的元素。
示例 2:
輸入:nums1 = [1], m = 1, nums2 = [], n = 0 輸出:[1] 解釋:需要合并 [1] 和 [] 。 合并結果是 [1] 。
示例 3:
輸入:nums1 = [0], m = 0, nums2 = [1], n = 1 輸出:[1] 解釋:需要合并的數組是 [] 和 [1] 。 合并結果是 [1] 。 注意,因為 m = 0 ,所以 nums1 中沒有元素。nums1 中僅存的 0 僅僅是為了確保合并結果可以順利存放到 nums1 中。
提示:
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109
解題思路:
* 88. 合并兩個有序數組
* 解題思路:
* 分別設置index1和index2,代表已排序的位置。
* index1代表nums1中的位置,index2代表nums中的位置。
* 然后兩兩比較,取小的那個插入nums1數組,但是這樣會造成數組變長,所以最終要刪掉多余的。
代碼:
class Solution88
{
public:void merge(vector<int> &nums1, int m, vector<int> &nums2, int n){if (n == 0){return;}int index1 = 0;int index2 = 0;for (int i = 0; i < m + n; i++){if (index1 == m){nums1.insert(nums1.begin() + i, nums2[index2]);index2++;continue;}if (index2 == n){break;}if (nums1[i] > nums2[index2]){nums1.insert(nums1.begin() + i, nums2[index2]);index2++;}else{index1++;}}int size = nums1.size();for (int i = m + n; i < size; i++){nums1.erase(nums1.begin() + m + n);}cout << nums1.size() << endl;}
};