力扣-88-合并两个有序数组
原题地址:
题解:
public void merge(int[] nums1, int m, int[] nums2, int n) {
int tail = m + n - 1;
int p1 = m - 1;
int p2 = n - 1;
//什么情况下结束,只要两个不在最前就继续
while (p1 >= 0 || p2 >= 0) {
if (p1 == -1) {//结束条件判定,长度不一样时
nums1[tail--] = nums2[p2--];
} else if (p2 == -1) {//结束条件判定,长度不一样时
nums1[tail--] = nums1[p1--];
} else {
nums1[tail--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--];
}
}
}
注意点:
非递减,意思就是最后一个肯定是最大的,且肯定是最后一个位置,不在变化,也就提供了解题思路,从后面放数据。
分而治之,最后一个位置放完后,集合-1。依此类推。