88. Merge Sorted Array【easy】
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
解法一:
1 class Solution { 2 public: 3 void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { 4 int i = m - 1; 5 int j = n - 1; 6 int len = m + n - 1; 7 8 if (n == 0) 9 { 10 return; 11 } 12 13 while (i >=0 && j >=0) 14 { 15 if (nums1[i] >= nums2[j]) 16 { 17 nums1[len--] = nums1[i--]; 18 } 19 else 20 { 21 nums1[len--] = nums2[j--]; 22 } 23 } 24 25 /* 26 while (i >= 0) 27 { 28 nums1[len--] = nums1[i--]; 29 } 30 */ 31 32 while (j >= 0) 33 { 34 nums1[len--] = nums2[j--]; 35 } 36 } 37 };
从后向前搞,nums2完毕之后就不用处理nums1了,因为都是往nums1中合并的
解法二:
1 class Solution { 2 public: 3 void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { 4 int i = m - 1, j = n - 1, tar = m + n - 1; 5 while (j >= 0) { 6 nums1[tar--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--]; 7 } 8 } 9 };
This code relies on the simple observation that once all of the numbers from nums2
have been merged into nums1
, the rest of the numbers in nums1
that were not moved are already in the correct place.