?目錄鏈接:
力扣編程題-解法匯總_分享+記錄-CSDN博客
GitHub同步刷題項目:
https://github.com/September26/java-algorithms
原題鏈接:力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術成長平臺
描述:
給你兩個按?非遞減順序?排列的整數(shù)數(shù)組?nums1
?和?nums2
,另有兩個整數(shù)?m
?和?n
?,分別表示?nums1
?和?nums2
?中的元素數(shù)目。
請你?合并?nums2
?到?nums1
?中,使合并后的數(shù)組同樣按?非遞減順序?排列。
注意:最終,合并后數(shù)組不應由函數(shù)返回,而是存儲在數(shù)組?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] 解釋:需要合并的數(shù)組是 [] 和 [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. 合并兩個有序數(shù)組
* 解題思路:
* 分別設置index1和index2,代表已排序的位置。
* index1代表nums1中的位置,index2代表nums中的位置。文章來源:http://www.zghlxwxcb.cn/news/detail-652811.html
* 然后兩兩比較,取小的那個插入nums1數(shù)組,但是這樣會造成數(shù)組變長,所以最終要刪掉多余的。文章來源地址http://www.zghlxwxcb.cn/news/detail-652811.html
代碼:
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;
}
};
到了這里,關于?LeetCode解法匯總88. 合并兩個有序數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!