題目
兩個(gè)有序整數(shù)數(shù)組 nums1 和 nums2 及他們的元素個(gè)數(shù) m柄延、n蚀浆,將 nums2 合并到 nums1 中,結(jié)果依然有序搜吧。
nums1 長度默認(rèn)為 m + n市俊,沒有元素的位置用 0 補(bǔ)齊。
原理
定義三個(gè)指針滤奈,分別指向 nums1 的最大元素(p1)摆昧、nums2 的最大元素(p2)、nums1 的最后一個(gè)元素(空位)(p)蜒程。依次對(duì)比 p1 和 p2 的大小绅你,大的放到 p 的位置伺帘,前移已經(jīng)移動(dòng)的指針和 p 指針即可。
代碼
public static void main(String[] args) {
int[] nums1 = new int[]{1, 3, 5, 7, 9, 0, 0, 0, 0};
int[] nums2 = new int[]{2, 4, 6, 8};
combineArray(nums1, 5, nums2, 4);
System.out.println(Arrays.toString(nums1));
}
private static void combineArray(int[] nums1, int m, int[] nums2, int n) {
int p = nums1.length - 1, p1 = m - 1, p2 = n - 1;
while (p1 >= 0 && p2 >= 0) {
nums1[p--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--];
}
}