【Java基础题型】力扣88、合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1nums2,另有两个整数 mn ,分别表示 nums1nums2 中的元素数目。

请你 合并 nums2到++nums1++ (要合并到的目标数组)中,使合并后的数组同样按 非递减顺序 排列。

注意: 最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n


示例 1:

复制代码
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

**示例 2:**略

示例 3:

复制代码
输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

、解法:下面代码采用的是双指针,初始化的时候nums1前半部分是正常要合并的数据,后半部分是预留的位置(占位用的0),按照非递减顺序****(升序),大的排在右边。(理清题干要求)

使用双指针i 、j,分别为从m+n-1和,n-1,m-1开始。(i)其中m+n是数组nums1的长度,比如int array[7],m+n-1=6(尾部指针从哪儿开始数),数组长度为m+n=7,有7个元素。

(j)其中n代表数组nums2的数组长度、元素个数。

(k)k代表nums1的有效数据部分的个数-1,m-1,就是它有效数据是从哪儿开始数下标的;

nums1 = [1,2,3,0,0,0],那这里m-1就是2,nums1[2]=3,nums1[1]=2,nums1[0]=1;

关键比较的数组的思路:

if( nums1[i]****> nums2[j]****) 这里比较数组1和数组2,谁大谁小,

大的数据放到数组1即nums1的末尾,依次递减。

nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6],

合并结果是 [1 ,2 ,2,3,5,6]

java 复制代码
public class 合并数组1 {
		public void merge(int[] nums1,int m,int[] nums2,int n) {

			int i=m-1;
			int j=n-1;
			int k=m+n-1;
			
			while(i>=0 && j>=0) {				
				if(nums1[i]>nums2[j]) {			//如果数组1大于数组2,录入数组1左边的
					nums1[k--]=nums1[i--];		//k是占0的空位置喔
				}else {
					nums1[k--]=nums2[j--];
				}
				
				while(j>=0) {
					nums1[k--]=nums2[j--];
				}
			}
		}
}

使用了双指针的方法来合并两个有序数组。这里有几个关键的步骤:

  1. 初始化三个指针i,j和k,分别指向nums1的有效元素的末尾、nums2的末尾和合并后的数组的末尾。

  2. 从nums1和nums2的末尾开始遍历,选取较大的元素 放入合并后的数组的末尾,并将相应指针向前移动一位。

  3. 将剩余的nums2的元素放入合并后的数组的相应位置。

相关推荐
Aurorar0rua24 分钟前
C Primer Plus Notes 09
java·c语言·算法
我不是QI3 小时前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
前端小刘哥3 小时前
新版视频直播点播EasyDSS平台,让跨团队沟通高效又顺畅
算法
明月(Alioo)4 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
叶梅树4 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
lingran__4 小时前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
MicroTech20255 小时前
微算法科技MLGO推出隐私感知联合DNN模型部署和分区优化技术,开启协作边缘推理新时代
科技·算法·dnn
小冯记录编程5 小时前
深入解析C++ for循环原理
开发语言·c++·算法
chenchihwen7 小时前
深度解析RAG系统中的PDF解析模块:Docling集成与并行处理实践
python·算法·pdf
Chloeis Syntax7 小时前
栈和队列笔记2025-10-12
java·数据结构·笔记·