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 @   Dylan_Java_NYC  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2017-04-21 LeetCode 366. Find Leaves of Binary Tree
点击右上角即可分享
微信分享提示