首页 > 其他分享 >leetcode 88. 合并两个有序数组 js实现

leetcode 88. 合并两个有序数组 js实现

时间:2022-11-22 23:00:43浏览次数:84  
标签:log -- 合并 nums1 88 数组 js leetcode nums2

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

 

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

 

提示:

  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • -109 <= nums1[i], nums2[j] <= 109

原题地址

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */

  // 时间复杂度:O((m+n)log⁡(m+n))O((m+n)\log(m+n))O((m+n)log(m+n))。 排序序列长度为 m+nm+nm+n,套用快速排序的时间复杂度即可,平均情况为 O((m+n)log⁡(m+n))O((m+n)\log(m+n))O((m+n)log(m+n))。

  // 空间复杂度:O(log⁡(m+n))O(\log(m+n))O(log(m+n))。 排序序列长度为 m+nm+nm+n,套用快速排序的空间复杂度即可,平均情况为 O(log⁡(m+n))O(\log(m+n))O(log(m+n))。

// var merge = function(nums1, m, nums2, n) {
//     nums1.splice(m,nums1.length-m,...nums2)
//     nums1.sort((a,b)=>a-b)
// };

  // 时间复杂度:O(m+n)。 指针移动单调递减,最多移动 m+n 次,因此时间复杂度为 O(m+n)。

  // 空间复杂度:O(1)。 
  // 原地修改,不需要额外空间。

var merge = function(nums1, m, nums2, n) {
    let p1 = m-1; // 定义num1 的末尾索引
    let p2 = n-1; // 定义num2 的末尾索引
    let len = m + n - 1;  // 定义最终生成的 num1 的末尾索引
    // 遍历的条件是两个指针必须都>=0
    while(p1>=0 && p2>=0){
        // 从后向前遍历, 每次给当前 nums[len] 赋两个数组中的最大值,同时给已经赋值过的数组的索引指针-1,给最终生成的 num1的数组长度-1
        nums1[len--]=nums1[p1]>nums2[p2]?nums1[p1--]:nums2[p2--]
    }
    // 最终遍历结束后,如果有数组更长的,会有剩余,通过遍历,修改数组指针,放入 num1 中
    while(p1 >= 0) nums1[len--] = nums1[p1--]
    while(p2 >= 0) nums1[len--] = nums2[p2--]
};

参考题解

标签:log,--,合并,nums1,88,数组,js,leetcode,nums2
From: https://www.cnblogs.com/beileixinqing/p/16916814.html

相关文章

  • RTL8811CU
    https://www.realtek.com/zh-tw/products/communications-network-ics/item/rtl8811cu......
  • LeetCode[124] 二叉树中的最大路径和
    https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/dp,树上搜索因为值有负数,所以针对一个节点的更新,有四种情况:节点值本身节点值+左子树节......
  • [Leetcode Weekly Contest]320
    链接:LeetCode[Leetcode]2475.数组中不等三元组的数目给你一个下标从0开始的正整数数组nums。请你找出并统计满足下述条件的三元组(i,j,k)的数目:0<=i<j<......
  • JS前期数组、字符串、时间、定时器、DOM\BOM事件方法等总结
    1.字符串方法        .charAt(对应字符元素下标)——根据下标查找字符串内元素        .charCodeAt(对应字符元素下标)——根据下标查找字符串某元素在u......
  • leetcode35. 搜索插入位置(简单)
    题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)......
  • Codeforces887C-Solution for Cube
    C.SolutionforCubetimelimitpertestmemorylimitpertestinputoutput......
  • JS业务
    1.页面的动态绑定2.事件处理3.生命周期函数4.网络请求<templete><view><text>{{title}} </text><textv-for="(item,index)inlist":ke......
  • Codeforces883F-Lost in Transliteration
    F.LostinTransliterationtimelimitpertestmemorylimitpertestinputoutputTherearesomeambiguitieswhenonewr......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:删除链表中的节点
    题目:有一个单链表的 head,我们想删除它其中的一个节点 node。给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。链表的所有值都是唯一的,并且保证给定......
  • leetcode724. 寻找数组的中心下标(数组)
    题目描述:给你一个整数数组nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最......