LeetCode 1331. Rank Transform of an Array

原题链接在这里:https://leetcode.com/problems/rank-transform-of-an-array/description/

题目:

Given an array of integers arr, replace each element with its rank.

The rank represents how large the element is. The rank has the following rules:

  • Rank is an integer starting from 1.
  • The larger the element, the larger the rank. If two elements are equal, their rank must be the same.
  • Rank should be as small as possible.

Example 1:

Input: arr = [40,10,20,30]
Output: [4,1,2,3]
Explanation: 40 is the largest element. 10 is the smallest. 20 is the second smallest. 30 is the third smallest.

Example 2:

Input: arr = [100,100,100]
Output: [1,1,1]
Explanation: Same elements share the same rank.

Example 3:

Input: arr = [37,12,28,9,100,56,80,5,12]
Output: [5,3,4,2,8,6,7,1,3]

Constraints:

  • 0 <= arr.length <= 105
  • -109 <= arr[i] <= 109

题解:

To get the rank, we need to sort the array and put its value to rank into a map. 

But we need to maintain the origianl index, thus we need to make a copy first.

Time Complexity: O(nlogn). n = arr.length.

Space: O(n).

AC Java:

 1 class Solution {
 2     public int[] arrayRankTransform(int[] arr) {
 3         int[] arrCopy = Arrays.copyOf(arr, arr.length);
 4         Arrays.sort(arrCopy);
 5         Map<Integer, Integer> hm = new HashMap<>();
 6         for(int num : arrCopy){
 7             hm.putIfAbsent(num, hm.size() + 1);
 8         }
 9 
10         for(int i = 0; i < arr.length; i++){
11             arr[i] = hm.get(arr[i]);
12         }
13 
14         return arr;
15     }
16 }

 

posted @ 2024-04-21 22:48  Dylan_Java_NYC  阅读(4)  评论(0编辑  收藏  举报