Java编程题——合并有序数组

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

刚拿到题时,首先想到的是从前向后依次比较大小,逐个将nums2中的数值加入到nums1中,但实际写起来发现非常麻烦,每进行一次插入数值后都要把nums1中的所有大于nums2中某数值的数往后移动一位。
因此,采用从后向前的方式将nums2中数值插入。由于两组都是有序数组,所以只需要依次比较两个数组“最后一位”的大小关系,放置完后向前移动一位。

文字有点繁琐,下面用画图来描述大概过程:
创建数组:
在这里插入图片描述
比较最后一位大小:
在这里插入图片描述
向前遍历:
在这里插入图片描述
在这里插入图片描述

代码示例:

package Homework;

import java.util.Arrays;
public class test05 {
    public static void main(String[] args) {
        int[] arr1 = new int[10];
        int[] arr2 = new int[6];
        arr1[0] = 1;arr1[1] = 3;arr1[2] = 6;arr1[3] = 8;
        arr2[0] = 2;arr2[1] = 2;arr2[2] = 3;arr2[3] = 4;arr2[4] = 7;arr2[5] = 11;
        merge(arr1,4,arr2,6);
        System.out.println(Arrays.toString(arr1));
    }

    public static void merge(int[] nums1, int m, int[] nums2, int n){
        int i = m - 1;
        int j = n - 1;
        int len = m + n - 1;
        if ( n == 0 ){ // 如果nums2为空时,返回nums1
            return ;
        }
        if ( m == 0 ){ // 如果nums1为空时,将nums2中所有元素放入nums1中
            nums1[len--] = nums2[j--];
        }

        while ( i >= 0 && j >= 0){
            if (nums1[i] < nums2[j]){  //从后往前进行比较
                nums1[len] = nums2[j];  
                len--;
                j--;
            }else {
                nums1[len] = nums1[i];
                len--;
                i--;
            }
        }

        while ( j >= 0 ){
            nums1[len] = nums2[j];
            len--;
            j--;
        }

        while ( i >= 0 ){
            nums1[len] = nums1[i];
            len--;
            i--;
        }
    }
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值