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

    给定两个有序整数数组 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]

    /**
     * @param {number[]} nums1
     * @param {number} m
     * @param {number[]} nums2
     * @param {number} n
     * @return {void} Do not return anything, modify nums1 in-place instead.
     */
    function comp(a,b){
        return a-b;
    }
    var merge = function(nums1, m, nums2, n) {
        // nums1.length = m;
        // nums2.length = n;
        // nums1.push(...nums2);
        // nums1.sort(comp)
        // return nums1;
        let left_1 = 0;
        let left_2 = 0;
        let nums1_length=m;
       
        while(left_1<m+n){
          if(left_1>=nums1_length){
            //如果第一个指针超出范围
           while(left_2<n){
              nums1[left_1++] =  nums2[left_2++]
           }
          }
          // 1.判断两指针指向的数据的大小
          if(nums1[left_1]>nums2[left_2]){
            
            // 如果大于 就将数据向后传递
            let i = nums1_length-1;
            while(i>=left_1){
              nums1[i+1] = nums1[i];
              i--;
            }
            nums1_length ++;
            nums1[left_1] = nums2[left_2];
            left_2++;
            left_1++;
          }else{
            left_1++;
          }
          
        }
        return nums1;
    };

    实现:先判断指向nums1的执行是否超过了nums1的范围,超过了说明已经将nums1中所有的数据已经都遍历过一遍了,所以直接将nums2中的数据直接赋值到nums1中即可;

        如果没有超过就将nums1和nums2中的数据进行比较,如果nums1中元素大于nums2中的元素,可以将nums1中的元素的向后移动,再将nums2中的元素放到合适的位置。

        

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/merge-sorted-array
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    redis
    JSP
    Cookie&Session
    Servlet
    HTTP
    TomCat
    CSS
    XML
    JDBC
    Mysql(对表的操作)
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11885355.html
Copyright © 2011-2022 走看看