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