LeetCode c++-Merge Sorted Array
题目要求:
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.
分析:
这道题是合并两个已排序的数组,要求是只能使用nums1,也就是原来的数组,不能使用额外的空间。并且nums1具有足够大的空间,因此最简单的方法就是从后往前排,然后nums1[m+n-1]开始往前存数据,存的是nums1[i]和nums2[j]中较大的数。
代码如下:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m - 1, j = n - 1, tar = m + n - 1;
while (j >= 0) {
nums1[tar--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
}
}
};
对于排完后剩下的是nums1还是nums2,这里判断的非常巧妙:
首先如果排完后,还剩下nums1,那么不用处理,因为nums1就是结果中的一部分。
如果剩下nums2,也就是while的判断,i是小于0的,那么这样就直接是赋值nums2[j--]。
posted on 2018-04-04 15:46 sichenzhao 阅读(91) 评论(0) 编辑 收藏 举报