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

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.xdnf.cn/news/12751.html

相关文章:

  • 机器学习算法_决策树
  • OC—UI学习-2
  • Linux安全加固:从攻防视角构建系统免疫
  • [创业之路-410]:经济学 - 国富论的核心思想和观点,以及对创业者的启发
  • 【11408学习记录】考研写作双核引擎:感谢信+建议信复合结构高分模板(附16年真题精讲)
  • 【优选算法】位运算
  • Python Flask文件处理与异常处理实战指南
  • Boost ASIO 库深入学习(3)
  • DBAPI如何优雅的获取单条数据
  • 【RTP】Intra-Refresh模式下的 H.264 输出,RTP打包的方式和普通 H.264 流并没有本质区别
  • webrtc 在线测试, 如何在线拉流测试
  • 实战:如何用SCINet增强YOLOv8在低照度下的目标检测性能(附完整代码)
  • 从入门到实战:AI学习路线全解析——避坑指南
  • CMake指令:project
  • C++动态规划-01背包
  • shell批量添加新用户
  • uni-app学习笔记三十--request网络请求传参
  • 基于 llama-factory进行模型微调
  • android关于pthread的使用过程
  • 【CBAP50技术手册】#39 Roles and Permissions Matrix(角色与权限矩阵):业务分析师的“秩序守护器”
  • 横向对比npm和yarn
  • 基于Vue3.0的在线工具网站
  • 26考研——数据的表示和运算_整数和实数的表示(2)
  • (三)Linux性能优化-CPU-CPU 使用率
  • 强化学习选择rule-based的reward func还是使用reward model / RLAIF?
  • mq安装新版-3.13.7的安装
  • [2025CVPR]确定性图像转换新突破:双逼近器布朗桥模型(Dual-approx Bridge)技术详解
  • LangGraph--Agent工作流
  • 【iOS】 Block再学习
  • iOS 抖音导航栏首页一键分两列功能的实现