合并兩個(gè)有序數(shù)組
歸并
核心思路: 依次比較,取較小值放入新數(shù)組中
i 遍歷nums1 , j 遍歷nums2 ,取較小值放入nums3中
那如果nums[i] 和nums[j]中相等,隨便放一個(gè)到nums3
那如果nums[i] 和nums[j]中相等,隨便放一個(gè)到nums3
此時(shí) nums1 中的元素已經(jīng)走完了,那么直接把 nums2 中剩下的元素拿到 nums3 中去,
因?yàn)閚ums2 是有序數(shù)組 ,所以不需要考慮 nums2剩下的元素比nums3小
這總方法最大的問題就是新開辟了一個(gè)數(shù)組 如果題目要求空間復(fù)雜度為O(1) ,這種方法就不管用了
思路二
歸并依次比較取較小值 ,但是思路二是依次比較取較大值
思路二和歸并大體上相似 ,
思路二整體思路:
i 指向nums1最后一個(gè)有效元素 ,向前遍歷 ,
j 指向nums2最后一個(gè)有效元素 ,向前遍歷
dst指向nums1 的最后一個(gè)元素 ,也是向前遍歷
j 指向的元素如果大于 i 指向的元素,那么就把 j 指向的元素放入 dst 指向的位置中去
當(dāng)j 向前遍歷完nums2時(shí) ,我們直接讓它結(jié)束就行了
但是還需要多考慮一種情況
當(dāng)nums1中的每一個(gè)元素都比nums2中的每一個(gè)元素大 ,nums1 一定會(huì)先遍歷完 ,這時(shí)候就需要將nums2 的每一個(gè)元素提前放入nums1中
文章來源:http://www.zghlxwxcb.cn/news/detail-405116.html
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int i = m -1 ;
int j = n- 1 ;
int dst = m + n -1 ;
while( i >=0 && j >= 0)
{
//nums2先走完 , j < 0
if( nums1[i]>= nums2[j]) //取較大值
{
nums1[dst] = nums1[i];
dst-- ;
i--;
}
else
{
nums1[dst]=nums2[j];
dst--;
j--;
}
}
// nums1 先走完 , i < 0
while( j>=0 )
{
nums1[dst] = nums2[j];
j -- ;
dst -- ;
}
}
如果你覺得這篇文章對(duì)你有幫助,不妨動(dòng)動(dòng)手指給點(diǎn)贊收藏加轉(zhuǎn)發(fā),給鄃鱈一個(gè)大大的關(guān)注
你們的每一次支持都將轉(zhuǎn)化為我前進(jìn)的動(dòng)力!??!文章來源地址http://www.zghlxwxcb.cn/news/detail-405116.html
到了這里,關(guān)于Leetcode. 88合并兩個(gè)有序數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!