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

相关推荐
OpenApi.cc10 分钟前
神经网络结构驱动+数据结构分析
数据结构·人工智能·神经网络
菜菜的顾清寒35 分钟前
力扣HOT100(42)链表-随机链表的复制
算法·leetcode·链表
lqqjuly42 分钟前
模型剪枝与稀疏化:理论、算法与可运行实现
人工智能·算法·剪枝
逻辑君1 小时前
Foresight研究报告【20260011】
人工智能·线性代数·算法·矩阵
珊瑚里的鱼1 小时前
【动态规划】不同路径Ⅱ
算法·动态规划
星恒随风1 小时前
C语言数据结构排序算法详解(下):冒泡排序、快速排序、归并排序和计数排序
c语言·数据结构·笔记·学习·排序算法
适应规律2 小时前
【无标题】
人工智能·python·算法
蒟蒻的贤2 小时前
关于文法G2算符优先分析的一个坑
算法
变量未定义~2 小时前
单调栈、单调队列(模板)、子矩阵、连通块中点的数量、堆箱子(4星)
算法