【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的元素放入合并后的数组的相应位置。

相关推荐
DuHz6 分钟前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女26 分钟前
TRSV优化2
算法
代码游侠1 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
2301_763472461 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
abluckyboy2 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异2 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_706653232 小时前
分布式系统安全通信
开发语言·c++·算法
天天爱吃肉82183 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
alphaTao3 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
甄心爱学习3 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode