1331. Rank Transform of an Array

1331. Rank Transform of an Array #

题目 #

  • 给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。
  • 序号代表了一个元素有多大。序号编号的规则如下:
    • 序号从 1 开始编号。
    • 一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。
    • 每个数字的序号都应该尽可能地小。

思路 #

模拟 #

代码 #

模拟 #

class Solution {
    public int[] arrayRankTransform(int[] arr) {
        Map<Integer, Queue<Integer>> map = new HashMap<>();

        for (int i = 0; i < arr.length; i++) {
            if (map.containsKey(arr[i]) == false) map.put(arr[i], new LinkedList<>());
            map.get(arr[i]).offer(i);
        }

        Arrays.sort(arr);

        int[] ans = new int[arr.length];
        Map<Integer, Integer> record = new HashMap<>();
        int rank = 0;
        for (int i = 0; i < ans.length; i++) {
            ans[map.get(arr[i]).poll()] = record.containsKey(arr[i]) ? record.get(arr[i]) : ++rank;
            record.put(arr[i], rank);
        }

        return ans;
    }
}

致谢 #