1.描述
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.
2.分析
3.代码
bool isIncreasing(int* nums1, int m, int* nums2, int n) {
if (m <= 1 && n <= 1) return true;
for (unsigned int i = 1; i < m; ++i) {
if (nums1[i-1] == nums1[i]) continue;
return nums1[i-1] < nums1[i];
}
for (unsigned int i = 1; i < n; ++i) {
if (nums2[i-1] == nums2[i]) continue;
return nums2[i-1] < nums2[i];
}
return true;
}
void merge(int* nums1, int m, int* nums2, int n) {
if (0 == n) return;
if (0 == m) {
for (unsigned int i = 0; i < n; ++i)
nums1[i] = nums2[i];
return ;
}
int id1 = m - 1;
int id2 = n - 1;
int id = m + n -1;
bool increasing = isIncreasing(nums1, m, nums2, n);
while (id1 >= 0 && id2 >= 0) {
if (increasing)
nums1[id--] = nums1[id1] >= nums2[id2] ? nums1[id1--] : nums2[id2--];
else
nums1[id--] = nums1[id1] <= nums2[id2] ? nums1[id1--] : nums2[id2--];
}
if (id2 >= 0) {
while (id2 >= 0) {
nums1[id--] = nums2[id2--];
}
}
}
网友评论