题目
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出:
[1,2,2,3,5,6]
Related Topics 数组 双指针
分析和反思
需要从尾开始遍历,否则在 nums1 上归并得到的值会覆盖还未进行归并比较的值。
然后注意的是 在判断的时候 应该优先判断索引有没有溢出,顺序很重要,,自己因为溢出思考了半天 debug了才解决,
呜呜 我好菜
代码
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index1 = m - 1, index2 = n - 1;
int resultIndex = m + n - 1;//最大索引
while (index1 >= 0 || index2 >= 0) {//都在0上
if (index1 < 0)//nums1全部对比完了 所以以此放入nums2
nums1[resultIndex--] = nums2[index2--];
else if (index2 < 0)
nums1[resultIndex--] = nums1[index1--];
else if (nums1[index1] > nums2[index2])//nums1 大 先放入
nums1[resultIndex--] = nums1[index1--];
else
nums1[resultIndex--] = nums2[index2--];
// 以下就是先判断大小再判断索引的错误方式....我太笨了
// if (nums1[index1] > nums2[index2])
// nums1[resultIndex--] = nums1[index1--];
// else if (nums1[index1] <= nums2[index2])
// nums1[resultIndex--] = nums2[index2--];
// else if (index1 < 0)
// nums1[resultIndex--] = nums2[index2--];
// else if (index2 < 0)
// nums1[resultIndex--] = nums1[index1--];
}
}
本文作者:Author: 寒光博客
文章标题:[LeetCode]88.合并两个有序数组
本文地址:https://dxoca.cn/Algorithm/361.html 百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
本文地址:https://dxoca.cn/Algorithm/361.html 百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。