欢迎浏览高耳机的博客
希望我们彼此都有更好的收获
感谢三连支持!
oj:https://leetcode.cn/problems/merge-sorted-array/submissions/
合并两个有序数组是个经典问题,它不仅在算法学习中频繁出现,也在实际开发中经常遇到。合并数组是一个基础而重要的操作。在Java中,我们有一些方法可以解决这个问题,每种方法都有其独特的优势和适用场景。
首先是第一种,先将两个有序数组合并到nums1中,接着调用Array.sort()方法进行排序,这种方法简单易懂,很容易想到。
public void merge1(int[] nums1, int m, int[] nums2, int n) {
for (int i = 0; i < n; i++) {
nums1[m+i] = nums2[i];
}
Arrays.sort(nums1);
}
public static void main1(String[] args) {
int m = 5;
int n = 5;
int[] nums1 = {1,2,4,6,7,0,0,0,0,0};
int[] nums2 = {1,2,2,4,8};
Test test = new Test();
test.merge1(nums1,m,nums2,n);
System.out.println(Arrays.toString(nums1));
}
第二种,使用双指针思想,从末尾开始同时对比nums1与nums2,将较大值放入nums1的末尾,同时对应数组长度-- ,来达到排序的目的。
public void merge2(int[] nums1, int m, int[] nums2, int n) {
// 从两个数组的末尾开始比较和合并元素,直到其中一个数组遍历完毕
while (m > 0 && n > 0) {
// 如果nums2的当前元素大于nums1的当前元素,
//则将nums2的当前元素放入nums1的末尾
if (nums2[n - 1] > nums1[m - 1]) {
nums1[m + n - 1] = nums2[n - 1];
n--; // 移动nums2指针向前一位
} else {
// 否则将nums1的当前元素放入nums1的末尾
nums1[m + n - 1] = nums1[m - 1];
m--; // 移动nums1指针向前一位
}
}
// 如果nums2中还有剩余元素,将其逐个放入nums1的前面
while (n > 0) {
nums1[n - 1] = nums2[n - 1];
n--;
}
}
public static void main(String[] args) {
int m = 5;
int n = 5;
int[] nums1 = {1, 2, 4, 6, 7, 0, 0, 0, 0, 0};
int[] nums2 = {1, 2, 2, 4, 8};
Test test = new Test();
test.merge2(nums1, m, nums2, n);
System.out.println(Arrays.toString(nums1));
}
以上就是该问题的两种解决思想;
希望这篇博客能为你理解java编程思想提供一些帮助。
如有不足之处请多多指出。
我是高耳机。