寒光博客

[LeetCode]88.合并两个有序数组
题目 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1...
扫描右侧二维码阅读全文
21
2020/06

[LeetCode]88.合并两个有序数组

题目

给你两个有序整数数组 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.合并两个有序数组
本文地址:http://dxoca.cn/Algorithm/361.html       百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
Last modification:June 21st, 2020 at 11:25 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment