当前位置: 首页 > Web前端 > JavaScript

88.合并两个有序数组-算法(leetcode,附思维导图+全解)300题

时间:2023-03-26 20:22:53 JavaScript

零题:算法(leetcode,附思维导图+全解)300题(88)合并两个有序数组1题目描述2解题概览(思维导图)3所有解1方案11)代码://方案1“本人。(忽略题目要求)”。//思路://1)状态初始化预处理nums1(即nums1.splice(m))和nums2(即nums2.splice(n))。//这个操作让nums1和nums2发生变化,改变了原来的数组!!//2)合并:将nums2合并到nums1中。//3)返回结果:对nums1进行升序排序并返回。varmerge=function(nums1,m,nums2,n){//1)状态初始化预处理nums1(即nums1.splice(m))和nums2(即nums2.splice(n))。//这个操作让nums1和nums2发生变化,改变了原来的数组!!nums1.splice(m);nums2.splice(n);//2)合并:将nums2合并到nums1中。nums1.push(...nums2);//3)返回结果:对nums1进行升序排序并返回。returnnums1.sort((a,b)=>a-b);};2Scenario21)code://Scenario2"self.doublepointer+extraarraymethod".//提示:“由于所需的时间复杂度为O(m+n),因此我们可以用空间换取时间”。//思路://1)状态初始化:nums1Index=0,nums2Index=0,sortedList=[]。//2)循环处理,条件为nums1Indexnums2Val,则sortedList.push(nums2Val);nums2Index++。//3)边界:可能还剩一侧,将它们放入sortedList。//4)遍历sortedList,依次覆盖nums1上的值。varmerge=function(nums1,m,nums2,n){//1)状态初始化:nums1Index=0,nums2Index=0,sortedList=[]。让nums1Index=0,nums2Index=0,sortedList=[];//2)循环处理,条件为nums1Indexnums2Val,则sortedList.push(nums2Val);nums2Index++。else{sortedList.push(nums2Val);nums2Index++;}}//3)边界:可能还剩一侧,将它们放入sortedList。if(nums1Index===m){sortedList.push(...nums2.slice(nums2Index));}elseif(nums2Index===n){sortedList.push(...nums1.slice(nums1Index));}//4)遍历sortedList,依次覆盖nums1上的值。for(leti=0;i<(m+n);i++){nums1[i]=sortedList[i];}}3Scheme31)Code://Scheme3“反向指针法”。//参考://1)https://leetcode.cn/problems/merge-sorted-array/solution/he-bing-liang-ge-you-xu-shu-zu-by-leetco-rrb0///思路://1)状态初始化:nums1Index=m-1,//nums2Index=n-1,fillIndex=m+n-1。//2)核心:循环处理,条件为nums1Index>=0||nums2Index>=0。//2.1)如果nums1已经“用完”(即nums1Index===-1),//那么fillVal=nums2Val;nums2Index--;.//2.2)如果nums2已经“用完”(即nums2Index===-1),//那么fillVal=nums1Val;nums1Index--;.//2.3)如果nums1Val>nums2Val,//那么fillVal=nums1Val;nums1Index--;.//2.4)如果nums1Val<=nums2Val,//那么fillVal=nums2Val;nums2Index--;.//2.5)nums1[fillIndex]=fillVal;填充索引--;.varmerge=function(nums1,m,nums2,n){//1)状态初始化:nums1Index=m-1,//nums2Index=n-1,fillIndex=m+n-1。让nums1Index=m-1,nums2Index=n-1,fillIndex=m+n-1;//2)核心:循环处理,条件是nums1Index>=0||nums2Index>=0。while(nums1Index>=0||nums2Index>=0){constnums1Val=nums1[nums1Index],nums2Val=nums2[nums2Index];让填充值;//2.1)如果nums1已经“用完”(即nums1Index===-1),//那么fillVal=nums2Val;nums2Index--;.如果(nums1Index===-1){fillVal=nums2Val;nums2Index--}//2.2)如果nums2已经“用完”(即nums2Index===-1),//那么fillVal=nums1Val;nums1Index--;.elseif(nums2Index===-1){fillVal=nums1[nums1Index];nums1Index--;}//2.3)如果nums1Val>nums2Val,//那么fillVal=nums1Val;nums1Index--;.elseif(nums1Val>nums2Val){fillVal=nums1Val;nums1Index--;}//2.4)如果nums1Val<=nums2Val,//那么fillVal=nums2Val;nums2Index--;.else{fillVal=nums2Val;nums2Index--;}//2.5)nums1[fillIndex]=fillVal;填充索引--;.nums1[fillIndex]=fillVal;填充索引--;}}四资源分享及更多1历史文章-概览2博主简介码农三少,致力于编写极简但完整的解决方案(算法)的博主。专注一题多解,结构化思维,欢迎一起刷LeetCode~