当前位置: 首页 > 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--];}}
}
http://www.dtcms.com/a/238346.html

相关文章:

  • 实验四:图像灰度处理
  • 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插件
  • 数据库入门:从原理到应用
  • 我用Cursor写了一个视频转文字工具,已开源,欢迎体验
  • 深入理解 React Hooks
  • 基于SpringBoot利用死信队列解决RabbitMQ业务队列故障重试无效场景问题
  • bugku 网络安全事件应急响应
  • Git配置代理
  • SCFSlRAE1通过调节SlWRKY1的稳定性来调控番茄对灰霉菌的抗性。
  • 自然语言处理——语言模型
  • jieba实现和用RNN实现中文分词的区别
  • 拼多多官方内部版 7.58.0 | 极限精简,只有2.5M