-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path1331-rank-transform-of-an-array.js
68 lines (52 loc) · 1.8 KB
/
1331-rank-transform-of-an-array.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// 1331. Rank Transform of an Array
// https://leetcode.com/problems/rank-transform-of-an-array/
/*
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.
*/
import { deepStrictEqual } from 'assert';
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Runtime: 228 ms, faster than 98.85% of JavaScript online submissions
// Memory Usage: 66.7 MB, less than 100.00% of JavaScript online submissions
/**
* @param {number[]} arr
* @return {number[]}
*/
const arrayRankTransform = arr => {
const ranks = [...new Set(arr)]
.sort((a, b) => a - b)
.reduce((acc, curr, idx) => acc.set(curr, idx + 1), new Map());
return arr.map(n => ranks.get(n));
};
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Time Limit Exceeded
// /**
// * @param {number[]} arr
// * @return {number[]}
// */
// const arrayRankTransform = arr => {
// const uniques = [...new Set(arr)];
// return arr.map(n => uniques.filter(u => u < n).length + 1);
// };
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Example 1:
deepStrictEqual(arrayRankTransform([40, 10, 20, 30]), [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:
deepStrictEqual(arrayRankTransform([100, 100, 100]), [1, 1, 1]);
// Explanation: Same elements share the same rank.
// Example 3:
deepStrictEqual(arrayRankTransform([37, 12, 28, 9, 100, 56, 80, 5, 12]), [
5,
3,
4,
2,
8,
6,
7,
1,
3,
]);