合并两个有序数组

给定两个有序整数数组 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2019-11-18 21:13  唐糖PJS  阅读(133)  评论(0编辑  收藏  举报