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