leetcode简单1122数组的相对排序

Posted qq_40707462

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode简单1122数组的相对排序相关的知识,希望对你有一定的参考价值。


思路:非比较排序,可以计数排序,即特殊的桶排序
先计算arr1里每个数出现的次数,再按照arr2的顺序挨个把这些数填到res里,最后处理剩下的数

class Solution:
    def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
        res=[0]*len(arr1)
        maxnum=0

        for n in arr1:
            maxnum=max(maxnum,n)
        fre=[0]*(maxnum+1)
        for n in arr1:
            fre[n]+=1
        
        index=0
        for n in arr2:
            for x in range(fre[n]):
                res[index]=n
                index+=1
            fre[n]=0
        for i in range(maxnum+1):
            for j in range(fre[i]):
                res[index]=i
                index+=1
        return res
class Solution {
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[]res=new int[arr1.length];
        
        //找出arr1里的最大值
        int maxnum=0;
        for(int x : arr1){
            maxnum=Math.max(maxnum,x);
        }
        //arr1每个数i出现次数
        int[] fre=new int[maxnum+1];
        for(int x:arr1){
            fre[x]++;
        }
        //按照arr2的顺序依次填入res
        int index=0;
        for(int x:arr2){
            for(int i=0;i<fre[x];i++){
                res[index++]=x;
            }
            fre[x]=0;
        }
        //寻找arr1里剩下的
        for(int x=0;x<=maxnum;x++){
            for(int i=0;i<fre[x];i++){
                res[index++]=x;
            }
        }
        return res;
    }
}

以上是关于leetcode简单1122数组的相对排序的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 1122. Relative Sort Array 数组的相对排序

LeetCode 1122. Relative Sort Array (数组的相对排序)

【Leetcode题目-03】数组排序算法题目

1122. 数组的相对排序

Golang语言LeetCode1122. Relative Sort Array

每日一题20201114(1122. 数组的相对排序)