|
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