leetcode--1122.数组的相对排序

问题描述:
在这里插入图片描述
在这里插入图片描述
示例

输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]

思路

这道题的重点在于需要统计arr2中的数字在arr1中出现的次数以及未出现的arr1中数字。这样操作很麻烦。不容易实现。
但是,提示中描述了arr1.length<=1000,所以在这里可以利用快速排序的思想。创建一个新数组copy,长度为1001,然后每遍历arr1数组中的一个元素,copy数组对应的角标的元素值+1,即:copy[arr1[i]]++,再将arr2.length作为for循环条件,在for循环中再进行while循环,条件是:如果arr2对应的元素值在copy中大于0,那么就将元素提取出来,放入arr1数组中。每从copy数组中提取一个元素,对应的角标的值-1.最后循环完就将所有arr2在arr1中出现的数字按照相对顺序放在了arr1中,最终只需要再遍历copy数组,如果数组的元素值有大于1的,依次将元素值提取出来,补充在arr1数组后面,随后返回arr1这个数组即可。

java代码

class Solution {
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[] copy = new int[1001];
        for(int i=0;i<arr1.length;i++){
            copy[arr1[i]]++;
        }
        int flag=0;
        for(int j=0;j<arr2.length;j++){
            while(copy[arr2[j]]>0){
            arr1[flag++]=arr2[j];
            copy[arr2[j]]--;
        }
        }
        for(int k=0;k<1001;k++){
            while(copy[k]>0){
                arr1[flag++]=k;
                copy[k]--;
            }
        }
        return arr1;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值