LeetCode 88. Merge Sorted Array
Solution1:我的答案1
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
if (!n) return;
if (!m) {
for (int i = 0; i < n; i++)
nums1[i] = nums2[i];
return;
}
int i = m + n - 1, j = m - 1, k = n - 1;
while (j >= 0 && k >= 0) {
if (nums1[j] >= nums2[k]) {
nums1[i--] = nums1[j];
j--;
} else {
nums1[i--] = nums2[k];
k--;
}
}
for (; k >= 0; k--)
nums1[i--] = nums2[k];
return;
}
};
Solution2:我的答案2
偷鸡摸狗的做法
class Solution {//虽然用了库函数,但效果也不错啊。。
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for(int i=0,j=m;i<n;i++,j++)
nums1[j]=nums2[i];
sort(nums1.begin(),nums1.begin()+m+n);
}
};
Solution3:
参考链接:http://www.cnblogs.com/grandyang/p/4059650.html
solution1的简洁写法:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int count = m + n - 1;
--m; --n;
while (m >= 0 && n >= 0) A[count--] = A[m] > B[n] ? A[m--] : B[n--];
while (n >= 0) A[count--] = B[n--];
}
};