LeetCode系列之 (JavaScript) => 88. 合并两个有序数组
题目描述:

【Leetcode 题目链接】:88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com)
解题思路分析:
- 在nums1中找到nums2 插入的位置,然后在整体排序;
- 或采用合并排序的方式,逐个位置判断需要插入的元素(还要考虑循环方向,比如下面的第三种解法);
- 由于m,n的大小不确定,所以还需要考虑覆盖和其中一个数组没有遍历结束的情况;
不同解法:
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
// 利用的是Array里面的自带方法 - 方便熟悉
var merge = function(nums1, m, nums2, n) {
nums1.splice(m,n,...nums2); // 插入nums2
nums1.sort((a,b) => a-b); // 整体排序
};
// 使用三个指针进行排序,时间复杂度是O(n^2)
var merge = function(nums1, m, nums2, n){
if(nums2.length == 0){
return;
}
var k = 0, i = 0, j = 0; // k 表示插入的位置,i遍历nums1,j遍历nums2
var newNums1 = nums1.slice(0,m);
for(k ; k < m+n; k++){
// 如果 nums2 遍历结束,将 nums1 直接加入
if(j == n){
while(i < m){
nums1[n+i] = newNums1[i];
i++;
}
// console.log(nums1)
return;
}
// 如果 nums1 遍历结束,将 nums2 直接加入
if(i == m){
while(j < n){
nums1[m+j] = nums2[j];
j++;
}
// console.log(nums1)
return;
}
if(newNums1[i] <= nums2[j]){
nums1[k] = newNums1[i++];
}else{
nums1[k] = nums2[j++];
}
}
}
// 【继续改进】 -> 将nums1中需要排序的m个元素插入到尾部 -> 不用考虑如果nums2提前遍历完的情况
// 循环结束条件:nums2循环遍历完,不用考虑nums1遍历完
var merge = function(nums1, m, nums2, n){
//将nums1中需要排序的m个元素插入到尾部
//循环方向从后往前,如果m>n,就会有“重叠”,从前往后循环,就会造成覆盖,移动就会造成问题
for(var count = 1; count <= m ; count++){
nums1[m+n-count] = nums1[m-count];
}
//遍历 nums2
var i = n; // 用来遍历nums1
var j = 0; // 用来遍历nums2
var k = 0; // 代表插入的位置
while(j < n){
//如果遍历nums1结束,直接将nums2 加到最后 (这一块【可加可不加】,提交都能通过)
if(k == m+j){// 或条件设为 i == n+m
while(j < n){
nums1[k++] = nums2[j++];
}
return;
}
if(nums1[i] <= nums2[j]){
nums1[k] = nums1[i++];
}else{
nums1[k] = nums2[j++];
}
k++;
}
}
// 【继续改进】:从nums1的末尾开始,比较两个数组最大的值
// 循环方向从后向前,同样可以防止覆盖
var merge = function(nums1, m, nums2, n){
var i = m-1,j = n-1,k = m+n-1;
while(i >= 0 && j >= 0){
if(nums1[i] > nums2[j]){
nums1[k--] = nums1[i--];
}else{
nums1[k--] = nums2[j--];
}
}
while(j >= 0){
nums1[k--] = nums2[j--];
}
}
LeetCode系列之 (JavaScript) => 88. 合并两个有序数组的更多相关文章
- [LeetCode每日一题]88. 合并两个有序数组
[LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...
- Java实现 LeetCode 88 合并两个有序数组
88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元 ...
- 【LeetCode】88. 合并两个有序数组
88. 合并两个有序数组 知识点:数组:排序:双指针: 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 ...
- Leetcode 88 合并两个有序数组 Python
合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分 ...
- LeetCode 88. 合并两个有序数组
题目: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- LeetCode 88. 合并两个有序数组(Merge Sorted Array)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- leetcode.双指针.88合并两个有序数组-Java
1. 具体题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别 ...
- leetcode刷题-88.合并两个有序数组
题目 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- 【LeetCode】Merge Sorted Array(合并两个有序数组)
这道题是LeetCode里的第88道题. 题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nu ...
- LeetCode【88. 合并两个有序数组】
首先想到的方法就是,假设一个nums3数组,然后,比较nums1与nums2的数值大小,然后,放在nums3中,再将nums3转移到nums1中. 实现起来很麻烦,1.没有考虑到下标问题,结果就Arr ...
随机推荐
- 无锡哲讯谈饲料加工行业ERP的功能
我国饲料生产与国际先进水平很接近,也是专业化水平较高的行业.随着社会分工的进一步明确,饲料产品的专业化配送将是未来发展的方向.在一些发达国家,专业化的散装配料车已经普遍应用,我国虽然也有这种形式,但是 ...
- 直播软件搭建,姓名,身份证input验证过滤
直播软件搭建,姓名,身份证input验证过滤 姓名验证:需求,可输入英文.汉字 for(let i=0;i<e.length;i++){ if(/^[a-zA-Z\u4e00-\u9fa5]+ ...
- 树莓派 Zero W 安装 apache2 + php
※ 树莓派Zero W ,默认 hostname为 raspberrypi ,通过USB网络方式登陆时,修改hostname后,登录主机名要随之变化. ① ssh pi@raspberrypi 更新系 ...
- ucocIII野火
5.1裸机系统 5.1.1 轮询系统 轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情.轮询系统是一种非常简单的软件结构,通常只适用于那些只需 ...
- AndroidStudio中的读取本地Gradle设置,gradle-wrapper.properties内容解释
gradle-wrapper.properties文件长成下面这个样子 distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distsd ...
- cudnn Backend API注意事项
一.在包含多个节点的图中,不支持in-place node.(如果图只包含一个节点,支持in-place node) Note that graphs with more than one opera ...
- apt-get update 报错 Repository ' InRelease' changed its 'Suite' value from 'stable' to 'oldstable'
问题截图: 解决方案: apt-get update --allow-releaseinfo-change
- python pip的使用
1.导出安装包 pip freeze > requirements.txt 2.安装requirements.txt文件中指定的扩展库:pip install -r requirement.tx ...
- SATA硬盘的数据和电源接口定义(转)
现在 SATA设备越来越普及,包括STAT硬盘和光驱基本都已经是 SATA接口的了,以前的老式电源输出接口一般都是20针供主板加上4针的电源供硬盘也就是说以前的电脑电源给硬盘供电没有设计15针 SAT ...
- Source Tree 1、解决打开闪退问题2、解决找不到项目的问题
闪退问题主要做了两点 1.版本降到3.1.2 下载链接:Sourcetree Download Archives | Sourcetree 2.参考博客做出文件修改参考bigbig猿博客 新建json ...