88. 合併兩個有序陣列
阿新 • • 發佈:2020-07-18
給你兩個有序整數陣列nums1 和 nums2,請你將 nums2 合併到nums1中,使 nums1 成為一個有序陣列。
說明:
- 初始化nums1 和 nums2 的元素數量分別為m 和 n 。
- 你可以假設nums1有足夠的空間(空間大小大於或等於m + n)來儲存 nums2 中的元素。
示例:
輸入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 輸出: [1,2,2,3,5,6]
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/merge-sorted-array
思路:
那麼OK,既然nums1陣列有足夠大的容量,來定義兩個指標嘍,其實是三個要定義的,物件也不一樣,這次兩個指標不再指向一個數組的頭和尾,而是要指向不同的陣列了。
定義三個指標,第一個指向nums1的尾,第二個指向nums2的尾巴,那麼第三個呢?
第三個指標指向擴增後的nums1的尾巴,其實就是n+m-1的位置
然後遍歷到的數進行比較,根據大小,大的先新增到擴增陣列的尾部,依次向前。
老師老師,為什麼要從後往前呢,我從前往後先填小的數不行嗎?
廢話,當然不行,不然我後往前幹嘛0.0 從前開始會改變nums1陣列原來的數,後面開始都是0也就無所謂了,大家自己去試試就知道了。
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i = m - 1; int j = n - 1; int all = m + n - 1; while(i >= 0 || j >= 0){ if(i < 0 ){ nums1[all--] = nums2[j--]; }else if(j < 0){ nums1[all--] = nums1[i--]; }else if(nums2[j] > nums1[i]){ nums1[all--] = nums2[j--]; }else{ nums1[all--] = nums1[i--]; } } } }