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

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

请你 合并 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 array7,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,nums12=3,nums11=2,nums10=1;

关键比较的数组的思路:

if( nums1i****> nums2j****) 这里比较数组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的元素放入合并后的数组的相应位置。

相关推荐
Ivanqhz13 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
lpfasd12313 小时前
推荐算法进化史
算法·机器学习·推荐算法
Pniubi13 小时前
力扣543二叉树的直径(深度优先搜索法(递归))
算法·leetcode·职场和发展
黎相思13 小时前
BTree
数据结构·b树·b+树
UIU1141 天前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场1 天前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi1 天前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David1 天前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院1 天前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng1 天前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust