zoukankan      html  css  js  c++  java
  • leetcode-88-合并两个有序数组


    本题是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]

    public void merge(int[] nums1, int m, int[] nums2, int n) {

    }

    分析

    简单思路:nums1是参与排序的,同时也是排序的结果,这个有点不太好处理;如何解决呢?

    我们很容易想到,把nums1 copy一份,然后对copy的操作,nums1的值直接覆盖,用双指针,使用了哪个指针的值,就让指针++;while终止条件就是++后的指针小于数组长度;如果一方已经遍历完毕,后续的数据就可以直接copy了;

    code

        public void merge(int[] nums1, int m, int[] nums2, int n) {
            int[] nums1_copy = new int[m];
            System.arraycopy(nums1,0,nums1_copy,0,m);
    
            int first = 0, second = 0;
            while(first < m && second < n) {
                int v1 = nums1_copy[first];
                int v2 = nums2[second];
                if(v1 < v2) {
                    nums1[first + second] = v1;
                    first ++;
                } else {
                    nums1[first + second] = v2;
                    second ++;
                }
            }
            if(first < m) {
                System.arraycopy(nums1_copy, first, nums1, first + second,m - first);
            }
            if(second < n) {
                System.arraycopy(nums2, second, nums1, first + second,n - second);
            }
        }
    

    你的鼓励也是我创作的动力

    打赏地址

  • 相关阅读:
    .NET总结
    gzip压缩输出
    矩阵 快速幂
    Mock单元测试
    mysql乱码原因之一
    写个android下倒计时软件
    linux gcc下实现简单socket套接字小程序
    gcc下MD5破解
    #1045 Access denied for user 'root'@'localhost'
    转android四种动画
  • 原文地址:https://www.cnblogs.com/yangsanchao/p/13353863.html
Copyright © 2011-2022 走看看