当前位置: 首页 > article >正文

leetcode | 88. 合并两个有序数组

题目描述

88. 合并两个有序数组 在这里插入图片描述

分析

题目不允许更改nums1的长度,要求原地更改。
题目其实不难,如果记住可以从后往前合并的解法,但是正向遍历的问题是什么呢? ——元素覆盖。那为什么负向遍历就不会有这个问题呢?

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
    let i=m-1,j=n-1,p=m+n-1;
    while(i>=0&&j>=0){
        if(nums1[i]>nums2[j]){
            nums1[p]=nums1[i];
            i--;
            p--;
            continue;
        }
        nums1[p]=nums2[j];
        j--;
        p--;
    }
    while(j>=0){
        nums1[p]=nums2[j];
        j--;
        p--;
    }
    return nums1;
};

为什么反向不会存在元素覆盖问题

其实就是一个数学问题。
假设,nums1=[a1,a2,…,an,0,0,…,0] nums2=[b1,b2,…,bn]; 合并过后的占据后x个,这x个,来自于k1个a串,k2个b串元素,求证m-k1+x<=n,成立。

在这里插入图片描述
最后,转为求证k2<=n,成立。在这里插入图片描述
取等号的时候是什么场景?
就是nums1的元素所有都小于nums2,后部分刚好全部由nums2填充。

小于号呢?
x中至少含有一个元素来自nums1,那么m-k1+x<n成立,也就是,至少有一个空位是0。

所以永远不存在元素被覆盖的情况


http://www.kler.cn/a/385313.html

相关文章:

  • Android Audio中 AudioTrack、 AudioFlinger和 HAL 使用dump的区别
  • React.lazy() 懒加载
  • 【系统架构】如何演变系统架构:从单体到微服务
  • java代码块
  • Flutter 中的那些设计模式的写法(持续更新)
  • MySQL存储目录与配置文件(ubunto下)
  • WebSocket 及时通信 - 2024最新版前端秋招面试短期突击面试题【100道】
  • 远程控制项目第二天
  • 【GPTs】Email Responder Pro:高效生成专业回复邮件
  • mysql分布式锁
  • CSS实现图片3D立体效果
  • 苍穹外卖学习记录
  • OkHttp网络请求框架
  • Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
  • Mysql 大表limit查询优化原理实战
  • 【ESP32+MicroPython】网络编程基础
  • 从个人品牌到企业品牌:开源 AI 智能名片 S2B2C 商城小程序的启示
  • QT 5.13.0 + MSVC2017 + MYSQL8.0.11
  • RabbitMQ 不公平分发介绍
  • VUE单页面 路由
  • Netty篇(入门编程)
  • 麒麟信安支撑2024年电力监控系统网络安全加固培训护航电力网络安全!
  • vscode----ssh远程连接输入地址跳转扩展
  • SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
  • Navicat15,Navicat16闪退,创建连接,使用自带工具等闪退
  • 二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》