88. Merge Sorted Array

Given two sorted integer arrays *nums1* and *nums2*, merge *nums2* into *nums1* as one sorted array.

**Note:**

- The number of elements initialized in *nums1* and *nums2* are *m* and *n* respectively.
- You may assume that *nums1* has enough space (size that is greater or equal to *m* + *n*) to hold additional elements from *nums2*.

**Example:**

1
2
3
4
5
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3

Output: [1,2,2,3,5,6]
思路:这题看着不难。但是如果遍历处理,边界和条件弄起来都很麻烦,一直有bug,网上找了最简洁的答案,一目了然,从后往前推,巧妙。我采用的是从前往后推,容易出错。
1
2
3
4
5
6
7
8
9
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int count = m + n - 1;
--m; --n;
while (m >=0 && n >= 0) nums1[count--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--];
while (n >= 0) nums1[count--] = nums2[n--];
}
};
Res. 4ms, Ranking 99.8%.