合并两个有序的数组

文章介绍了如何将数组nums2合并到nums1中,保持合并后数组的非递减顺序,通过比较元素值并使用冒泡排序实现。

给你两个整数,生成有序数组 nums1 和 nums2

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

示例 1:

输入:m = 3, n = 3
输出:[1,2,2,3,5,6]

示例 2:

输入:m = 1, n = 0
输出:[1]

示例 3:

输入 m = 0, n = 1
输出:[1]

解题思路:

1. 同时遍历数组1和数组2, 判断两个数组中那个比较小,将小的数放入到新的数组中。

2. 任何一个数组遍历完之后,跳出循环

3. 判断那个数组先遍历完毕,然后将另一个数组的剩余值存到新数组中。

public class Test01{
    public static void main(String[] args){
        int[] arr1 = getArray(9);
        int[] arr2 = getArray(6);
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        System.out.println(Arrays.toString(joinArray(arr1, arr2)));
    }
    /*
        用于数组的生成
    */        
    public static int[] getArray(int num){
        Random random = new Random();
        int[] arr = new int[num];
        for(int i =0,i<num;i++){
            arr[i] = random.nextInt(1,100);
        }
        Test01.sortArray(arr);
        retrun arr;
    }

    /*
        用于数组的排序
    */
    public static int[] sortArray(int[] arr){
        // 冒泡排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr;
    }
    
    /*
        进行数组的合并
    */
    public static int[] joinArray(int[] arr1,int[] arr2){

       int[] arr3 = new int[arr1.length+arr2.length];
        // 需要三个指针用来遍历三个数组
        int index1,index2,index3;
        while(index1<arr.length && index2<arr2.length){

            if(arr1[index1] <= arr2[index2]){
                 arr3[index3] = arr1[index1];
                 index1++;
            }else{
                 arr3[index3] = arr2[index2];
                 index2++;   
            }
                index3++;
        }
        // 循环遍历结束后,把剩余的数组放入到新数组中去
        if(index1==arr1.length){
           while(index2<arr2.lenth){
                arr3[index3] = arr2[index2];
                index2++;
                index3++; 
           }
        }
        if(index2==arr2.length){
           while(index1<arr1.lenth){
                arr3[index3] = arr1[index1];
                index1++;
                index3++; 
           }
        }     
         return arr3;
    } 
    
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值