• 88. 合并两个有序数组


    题目链接:https://leetcode-cn.com/problems/merge-sorted-array/

    class Solution {
        public void merge(int[] nums1, int m, int[] nums2, int n) {
            // 思路:
            // 双指针的方式。 【充分利用本身有序的特点】
            // 首先 copy 一份 nums1 出来 [因为最后返回的要是nums1]
            // 用两个指针,一个从 nums1_copy[0] 开始,一个从nums2[0]开始往后
            // 对比哪个跟小,就先放进 nums1
            // 剩余的直接放到nums1 后面即可
    
            int[] nums1_copy = new int[m];
            System.arraycopy(nums1, 0, nums1_copy, 0, m);
    
            // nums1_copy 的指针
            int p_copy = 0;
            // nums1 的指针
            int p1 = 0;
            // nums2 的指针
            int p2 = 0;
    
            while(p_copy < m && p2 < n){
                nums1[p1++] = nums1_copy[p_copy] < nums2[p2]? nums1_copy[p_copy++]:nums2[p2++];
            }
            // 如果 nums2已经全部放到了nums1上,接下来就要把 nums_copy剩余的放到nums1上面去
            if(p_copy < m){
                System.arraycopy(nums1_copy, p_copy, nums1, p_copy+p2, m + n - p_copy - p2);
            }
            // 如果 nums_copy 已经全部放到了nums1上,接下来就要把 nums2 剩余的放到nums1上面去
            if(p2 < n){
                System.arraycopy(nums2, p2, nums1, p_copy+p2, m + n - p_copy - p2);
            }
        }
    }
    

     难点:

    1 双指针思维

    2 System.arraycopy();方法的使用,因为面试的时候一般情况下没有自动提示,需要手写,需要表熟悉库函数的拼写和参数含义

         * @param      src      the source array. 源数组
         * @param      srcPos   starting position in the source array. 源数组中的起始位置
         * @param      dest     the destination array.目标数组
         * @param      destPos  starting position in the destination data.目标数组中的起始位置
         * @param      length   the number of array elements to be copied.要复制的数组元素的数量

    简单来说就源数组 src 的第几个 srcPos 开始,复制到目标数组 dest 的第几个 destPos 上面去,一共复制源数组的 length 个
         * @exception  IndexOutOfBoundsException  if copying would cause
         *               access of data outside array bounds.
         * @exception  ArrayStoreException  if an element in the <code>src</code>
         *               array could not be stored into the <code>dest</code> array
         *               because of a type mismatch.
         * @exception  NullPointerException if either <code>src</code> or
         *               <code>dest</code> is <code>null</code>.
         */
        public static native void arraycopy(Object src,  int  srcPos,
                                            Object dest, int destPos,
                                            int length);
    
  • 相关阅读:
    Jedis 源代码阅读一 —— Jedis
    Java中的${pageContext.request.contextPath}
    VMware Workstation 12 安装mac os x 10.11
    机器学习——朴素贝叶斯分类器
    Codeforces 138C(区间更新+离散化)
    Threejs 官网
    深刻理解Nginx之Nginx完整安装
    Apache + Tomcat 负载均衡 session复制
    小P寻宝记——好基友一起走
    C++数值类型极限值的获取
  • 原文地址:https://www.cnblogs.com/junbaba/p/14139556.html
Copyright © 2020-2023  润新知