一、題目描述
給你兩個(gè)有序整數(shù)數(shù)組nums1
和nums2
,請(qǐng)你將nums2
合并到nums1
中,使nums1
成為一個(gè)有序數(shù)組。
初始化nums1
和nums2
的元素?cái)?shù)量分別為 m 和 n 。
你可以假設(shè)nums1
的空間大小等于 m + n,這樣它就有足夠的空間保存來(lái)自nums2
的元素。
二、題目解析
設(shè)置兩個(gè)索引i
和j
分別指向 nums1 和 nums2 的有效元素的尾部,從它們的尾部開(kāi)始向前遍歷。
同時(shí)設(shè)置索引cur
指向nums1
的最末尾。
在每次遍歷過(guò)程中,比較i
和j
指向的元素值大小,把大的元素填充到cur
的位置,填充完畢說(shuō)明那個(gè)元素已經(jīng)放置在它應(yīng)該放置的位置,不需要在管它了,把cur
向前移動(dòng),同時(shí)把i
或者j
向前移動(dòng)。
繼續(xù)比較i
和j
指向的元素值大小,把大的元素填充到cur
的位置。
三、參考代碼
classSolution{
publicvoidmerge(int[]nums1,intm,int[]nums2,intn){
//索引從有序數(shù)組nums1有效元素的末端開(kāi)始
//數(shù)組的下標(biāo)索引從零開(kāi)始計(jì)數(shù)
//索引012
//數(shù)組[1,2,3]
inti=m-1;
//索引從有序數(shù)組nums2的末端開(kāi)始
intj=n-1;
//從有序數(shù)組nums1最末端的位置開(kāi)始保存元素
intcur=nums1.length-1;
//通過(guò)循環(huán)把num2的元素都移動(dòng)到num1中
while(j>=0){
//比較num1和num2中當(dāng)前的元素大小
//如果num1中的索引位置為i的元素大于num2中索引位置為j的元素
//為了防止越界i必須是大于等于0
if(i>=0&&nums1[i]>nums2[j]){
//把num1中的索引位置為i的元素復(fù)制到索引為cur的位置
//此時(shí)cur的元素已經(jīng)確定下來(lái)
nums1[cur]=nums1[i];
//接下來(lái)去確定cur前面一個(gè)元素應(yīng)該放什么數(shù)字
cur--;
//此時(shí),索引i需要向前移動(dòng)
i--;
//否則,如果num1中的索引位置為i的元素小于或者等于num2中索引位置為j的元素
}else{
//把num2中的索引位置為j的元素復(fù)制到索引為cur的位置
nums1[cur]=nums2[j];
//接下來(lái)去確定cur前面一個(gè)元素應(yīng)該放什么數(shù)字
cur--;
//此時(shí),索引j需要向前移動(dòng)
j--;
}
}
}
}
審核編輯 :李倩
-
元素
+關(guān)注
關(guān)注
0文章
47瀏覽量
8422 -
數(shù)組
+關(guān)注
關(guān)注
1文章
416瀏覽量
25913
原文標(biāo)題:LeetCode 26:刪除有序數(shù)組中的重復(fù)項(xiàng)
文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論