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

LeetCode面试经典150题—合并两个有序数组—LeetCode88

原题请见:LeetCode88 合并两个有序数组

1、题目描述

请添加图片描述

2、题目分析

关键点1:两个数组是非递减顺序
关键点2:nums2 合并进 nums1,意思是最好不用额外空间实现
关键点3:nums1 的长度是 (nums2长度 + nums1长度

因为两数组是有序的,所以可以从两个数组的最左边(或者最右边),陆续比较哪个数组的边界元素更小(或更大)依次取出来扫到目标数组即可。
但考虑到本题目是在nums1 数组上原地排序,如果从左往右比较,会导致新元素插入nums1 的时候, nums1原来的元素需要依次右移,复杂度较高。
又考虑到 nums1 数组的右边 n 个元素都是空白的,所以从右往左比较,不会导致元素顺移问题。

3、题解

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {// 最终目标数组的索引int idx = m + n - 1;int idx1 = m - 1;int idx2 = n - 1;// 依次取出来 nums1和nums2当前最大的,放在目标数组最右边while (idx1 >= 0 && idx2 >= 0) {if (nums1[idx1] >= nums2[idx2]) {nums1[idx--] = nums1[idx1--];} else {nums1[idx--] = nums2[idx2--];}}// 哪个数组还剩的话,说明这块整体小于另一个数组,剩下的直接陆续往左排while (idx1 >= 0) {nums1[idx--] = nums1[idx1--];}while (idx2 >= 0) {nums1[idx--] = nums2[idx2--];}}
}

相关文章:

  • 实验四:图像灰度处理
  • LLMs之Structured Output:vLLM 结构化输出指南—从约束生成到自动解析与高效实现
  • 信号与传输介质
  • 基于fpga的疲劳驾驶检测
  • 06. C#入门系列【自定义类型】:从青铜到王者的进阶之路
  • 【LeetCode 热题100】字符串 DP 三连:最长回文子串、最长公共子序列 编辑距离(力扣5 / 1143/ )(Go语言版)
  • 【量化】策略交易 - 均线策略(Moving Average Strategy)- 代码增强版本
  • 整数的字典序怎么算
  • AUTOSAR实战教程--DoIP_02_诊断链路建立流程
  • 使用vs2022中自带的sqlserver,并在docker中安装mssql-server 并配置相关信息
  • [特殊字符] Whisper 模型介绍(OpenAI 语音识别系统)
  • 【面试题】如何保证MQ的消息不丢失、不重复
  • HTML前端开发:JavaScript 获取元素方法详解
  • RabbitMQ fanout交换机
  • 【 SpringCloud | 微服务 MQ基础 】
  • 基于cornerstone3D的dicom影像浏览器 第三十章 心胸比例测量工具CTRTool
  • 免费批量Markdown转Word工具
  • 单线程模型中消息机制解析
  • C++ OpenCV 学习路线图
  • CAD多面体密堆积3D插件
  • 青岛专业设计网站公司/新郑网络推广外包
  • 设计与制作/seo团队
  • 宁波高端网站制作公司/代做百度收录排名
  • 专业做二手房装修网站/网站模板购买
  • 俄文网站建设 俄文网站设计/网站收录查询工具
  • 微信网站下载/收录优美的图片