java两个有序数组的初始化_leecode:88–合并两个有序数组 | 星尘

给定两个有序整数数组 nums1和 nums2,将 nums2合并到 nums1中,使得 num1成为一个有序数组。

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n。

你可以假设 nums1有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]

解题思路:

将数组2(nums2)中的数值全部合并到数组1(nums1)中,最后对数组1(nums1)进行排序操作即可。

void merge(int* nums1, int m, int* nums2, int n) {

int mid = m + n;

if(m <= 0 && n <= 0)

{

return;

}

for(int i = 0; i 

{

nums1[m] = nums2[i];

m++;

}

for(int j = 0; j 

{

for(int k = 0; k 

{

if(nums1[k] > nums1[k + 1])

{

int t = nums1[k];

nums1[k] = nums1[k + 1];

nums1[k + 1] = t;

}

}

}

return;

}

解题思路2:

先当两个数组都有元素的时候填充大的到末尾,如果有一个数组的数用完了,说明剩下的那个数组的所有数都小于当前填充的位置:

如果是第一个数组用完了,说明剩下的(最小的那些)全是数组2,把数组2填充进去就好了

如果是第二个数组用完了,说明剩下的全是数组1,不用填充了,他们已经在了

思路:因为这是两个有序数组,且nums1有足够的空间来保存 nums2 中的元素。

从后往前填充

如果数组nums1遍历完了,说明剩下的元素全是数组nums2的,把数组nums2的数填充进去就好了。

如果数组nums2遍历完了,说明剩下的元素全是数组nums1的,就不用填充了。

//边比较边插入

class Solution {

public void merge(int[] nums1, int m, int[] nums2, int n) {

if (n <= 0 || nums2.length <= 0) {

return;

}

int all = (m--) + (n--)-1;//参与排序的总长度

while (m >= 0 && n >= 0 && all >= 0) {

//边插入边排序

if (nums1[m] > nums2[n]) {

nums1[all--]=nums1[m--];

}else {

nums1[all--]=nums2[n--];

}

}

//处理剩下的数据

while (m >= 0){

nums1[all--]=nums1[m--];

}

while (n >= 0){

nums1[all--]=nums2[n--];

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值