合并两个有序数组

1.介绍

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 使得 num1 成为一个有序数组。

说明:

  • 初始化 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]

2.解决思想

1.建立一个新数组,然后把两个有序数组中的数字存放到新数组中

2.遍历新数组,替换nums1中的值

3.代码

代码是参考了一些其他大佬的思想,然后想出来的代码,代码的优化是我很满意的,看起来特别简洁。(四个条件判断其实主要分两种类型:判断两个数组中是否有为空的,和不为空的时候判断大小的)其实问题解决是很简单的,本来不打算上传上去的,但是看到最后被优化后的简洁的代码,还是觉得可以和大家分享下。

public static void merge(int[] nums1, int m, int[] nums2, int n) {
        int[] ints = new int[m + n];
        int i = 0, j = 0, k = 0;
        while (i < m || j < n) {
            if (j >= n) ints[k++] = nums1[i++];
            else if (i >= m) ints[k++] = nums2[j++];
            else if (nums1[i] < nums2[j]) ints[k++] = nums1[i++];
            else if (nums1[i] >= nums2[j]) ints[k++] = nums2[j++];
        }
        while (k-- > 0) nums1[k] = ints[k];
    }

 

posted @ 2018-12-19 10:00  夜宵95  阅读(242)  评论(0)    收藏  举报