leetcode88 合并两个有序数组

题目


两个按 非递减顺序 排列的整数数组 nums1nums2,另有两个整数 m 和 n ,分别表示 nums1nums2 中的元素数目。
合并 nums2nums1 中,使合并后的数组同样按 非递减顺序 排列。

合并后数组存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。


从后面考虑问题,便于元素的挪位。
思路还是通过元素之间的比较,来进行选择填充。重点是循环的结束条件,边界分析。

void merge(int nums1[],int m,int nums2[],int n){
	// nums1 数组空间为 m+n, 后面 n个空间用于容下 nums2 
	m--;
	n--;
	// 此时 m+n+1 是 nums1 数组的最大下标
	while(n>=0){
		// m>=0 是为了考虑 假设 nums1 自己本身没有元素,只给 nums2留了空间的这种情况。
		// 以及 当 nums1 中的元素 都移完了 的情况。
		// nums1>nums2, 则将nums1[m]移到后面,然后索引-- 
		if(m>=0&&nums1[m]>nums2[n]){
			nums1[m+n+1]=nums1[m--];
			
		// nums1<=nums2, 将nums2[n]放到后面, nums2的索引-- 
		}else{
			nums1[m+n+1]=nums2[n--];
		}
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值