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

【LeetCode 88. 合并两个有序数组】 java实现

LeetCode 88. 合并两个有序数组

题目描述

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

说明:

  • 初始化 nums1nums2 的元素数量分别为 mn
  • 你可以假设 nums1 的大小等于 m + n(即它有足够的空间存放 nums2 中的元素)。

示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3
输出: [1,2,2,3,5,6]

Java 实现解法

方法一:双指针从后向前合并
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = m - 1; // nums1的当前索引int p2 = n - 1; // nums2的当前索引int p = m + n - 1; // nums1的末尾索引while (p1 >= 0 && p2 >= 0) {if (nums1[p1] > nums2[p2]) {nums1[p--] = nums1[p1--];} else {nums1[p--] = nums2[p2--];}}// 如果nums2还有剩余,直接拷贝到nums1前面while (p2 >= 0) {nums1[p--] = nums2[p2--];}}
}

解题思路

  • 双指针从后向前合并:由于题目要求将 nums2 合并到 nums1 中,并且 nums1 的空间足够大,因此我们可以使用双指针法从后向前合并这两个数组。这样做的好处是可以避免在合并过程中对 nums1 的覆盖,从而丢失尚未处理的数据。
  • 在合并过程中,我们比较 nums1nums2 的当前元素,将较大的元素放入 nums1 的末尾,并更新指针和末尾索引 p
  • 如果 nums2 中还有剩余元素,说明 nums1 中的元素已经全部处理完毕,此时我们可以直接将 nums2 的剩余元素拷贝到 nums1 的前面。

这种方法的时间复杂度是 O(m+n),其中 mn 分别是 nums1nums2 的长度,因为每个元素我们至多处理一次。空间复杂度是 O(1),因为我们是在原地修改 nums1

注:来源leetcode网站

http://www.lryc.cn/news/463094.html

相关文章:

  • 200Kg大载重多旋无人机价格高昂技术分析
  • 快速理解http的get和post
  • Mamba学习笔记(3)—S4原理基础
  • 好看的ppt字体推荐!分享3个制作幻灯片的常用软件!
  • 第6篇:无线与移动网络
  • 【C++标准模版库】unordered_map和unordered_set的介绍及使用
  • 深度解析Transformer:从自注意力到MLP的工作机制
  • 《米小圈动画成语》|在趣味中学习,在快乐中掌握成语知识!
  • linux系统之jar启动脚本
  • 简单认识Maven 2-Maven坐标
  • Xilinx UltraScale系列FPGA纯verilog图像缩放,工程项目解决方案,提供2套工程源码和技术支持
  • React(二) JSX中的this绑定问题;事件对象参数传递;条件渲染;列表渲染;JSX本质;购物车案例
  • 前端开发攻略---取消已经发出但是还未响应的网络请求
  • 韩信走马分油c++
  • 【Linux】Anaconda下载安装配置Pytorch安装配置(保姆级)
  • 渗透测试导论
  • 鸿蒙学习笔记--搭建开发环境及Hello World
  • 【ArcGIS风暴】ArcGIS字段计算器公式汇总
  • 探索秘境:如何使用智能体插件打造专属的小众旅游助手『小众旅游探险家』
  • 机械臂力控方法概述(一)
  • 1971. 寻找图中是否存在路径
  • FLINK SQL语法(1)
  • 【Fargo】1:基于libuv的udp收发程序
  • WebSocket介绍和入门案例
  • k8s集群版本升级
  • XML 和 SimpleXML 简介
  • MySQL 中 LIKE 语句的 `%` 和 `_` 以及 BLOB 和 TEXT 的详细解析和案例示范
  • git clone卡在Receiving objects
  • vue+ant 弹窗可以拖动
  • (42)MATLAB中使用fftshift绘制以零为中心的功率谱