|
1 | 1 | package g2901_3000.s2948_make_lexicographically_smallest_array_by_swapping_elements |
2 | 2 |
|
3 | | -// #Medium #Array #Sorting #Union_Find #2023_12_31_Time_2141_ms_(6.45%)_Space_69.2_MB_(74.19%) |
| 3 | +// #Medium #Array #Sorting #Union_Find #2023_12_31_Time_1831_ms_(6.45%)_Space_69.4_MB_(74.19%) |
4 | 4 |
|
5 | 5 | import kotlin.math.abs |
6 | 6 |
|
7 | 7 | class Solution { |
8 | 8 | fun lexicographicallySmallestArray(nums: IntArray, limit: Int): IntArray { |
9 | 9 | val n = nums.size |
10 | | - val nodes = arrayOfNulls<Node>(n) |
11 | | - for (i in 0 until n) { |
12 | | - nodes[i] = Node(i, nums[i]) |
13 | | - } |
14 | | - nodes.sortWith { a: Node?, b: Node? -> |
| 10 | + val nodes = Array(n) { i -> Node(i, nums[i]) } |
| 11 | + nodes.sortWith { a: Node, b: Node -> |
15 | 12 | Integer.signum( |
16 | | - a!!.value - b!!.value |
| 13 | + a.value - b.value |
17 | 14 | ) |
18 | 15 | } |
19 | 16 | var group = 1 |
20 | | - nodes[0]!!.group = group |
| 17 | + nodes[0].group = group |
21 | 18 | for (i in 1 until n) { |
22 | | - if (abs((nodes[i]!!.value - nodes[i - 1]!!.value).toDouble()) <= limit) { |
23 | | - nodes[i]!!.group = group |
| 19 | + if (abs(nodes[i].value - nodes[i - 1].value) <= limit) { |
| 20 | + nodes[i].group = group |
24 | 21 | } else { |
25 | | - nodes[i]!!.group = ++group |
| 22 | + nodes[i].group = ++group |
26 | 23 | } |
27 | 24 | } |
28 | 25 | val groupBase = IntArray(group + 1) |
29 | 26 | for (i in n - 1 downTo 0) { |
30 | | - groupBase[nodes[i]!!.group] = i |
| 27 | + groupBase[nodes[i].group] = i |
31 | 28 | } |
32 | 29 | val groupIndex = IntArray(n) |
33 | 30 | for (node in nodes) { |
34 | | - groupIndex[node!!.id] = node.group |
| 31 | + groupIndex[node.id] = node.group |
35 | 32 | } |
36 | 33 | val ans = IntArray(n) |
37 | 34 | for (i in 0 until n) { |
38 | 35 | val index = groupBase[groupIndex[i]] |
39 | | - ans[i] = nodes[index]!!.value |
| 36 | + ans[i] = nodes[index].value |
40 | 37 | groupBase[groupIndex[i]]++ |
41 | 38 | } |
42 | 39 | return ans |
|
0 commit comments