@@ -3,28 +3,28 @@ package g3401_3500.s3425_longest_special_path
3
3
// #Hard #2025_01_19_Time_106_(100.00%)_Space_187.68_(100.00%)
4
4
5
5
class Solution {
6
- private lateinit var adj: Array <ArrayList <IntArray >? >
6
+ private lateinit var adj: Array <ArrayList <IntArray >>
7
7
private lateinit var nums: IntArray
8
8
private lateinit var dist: IntArray
9
9
private lateinit var lastOccur: IntArray
10
- private var pathStack: ArrayList <Int ?> ? = null
10
+ private lateinit var pathStack: ArrayList <Int >
11
11
private var minIndex = 0
12
12
private var maxLen = 0
13
13
private var minNodesForMaxLen = 0
14
14
15
- fun longestSpecialPath (edges : Array <IntArray >, nums : IntArray ): IntArray? {
15
+ fun longestSpecialPath (edges : Array <IntArray >, nums : IntArray ): IntArray {
16
16
val n = nums.size
17
17
this .nums = nums
18
- adj = Array <ArrayList <IntArray >? > (n) { ArrayList <IntArray >() }
18
+ adj = Array <ArrayList <IntArray >>(n) { ArrayList <IntArray >() }
19
19
for (i in 0 .. < n) {
20
20
adj[i] = ArrayList <IntArray >()
21
21
}
22
22
for (e in edges) {
23
23
val u = e[0 ]
24
24
val v = e[1 ]
25
25
val w = e[2 ]
26
- adj[u]!! .add(intArrayOf(v, w))
27
- adj[v]!! .add(intArrayOf(u, w))
26
+ adj[u].add(intArrayOf(v, w))
27
+ adj[v].add(intArrayOf(u, w))
28
28
}
29
29
dist = IntArray (n)
30
30
buildDist(0 , - 1 , 0 )
@@ -36,7 +36,7 @@ class Solution {
36
36
}
37
37
lastOccur = IntArray (maxVal + 1 )
38
38
lastOccur.fill(- 1 )
39
- pathStack = ArrayList <Int ? >()
39
+ pathStack = ArrayList <Int >()
40
40
minIndex = 0
41
41
maxLen = 0
42
42
minNodesForMaxLen = Int .Companion .MAX_VALUE
@@ -46,7 +46,7 @@ class Solution {
46
46
47
47
private fun buildDist (u : Int , parent : Int , currDist : Int ) {
48
48
dist[u] = currDist
49
- for (edge in adj[u]!! ) {
49
+ for (edge in adj[u]) {
50
50
val v = edge[0 ]
51
51
val w = edge[1 ]
52
52
if (v == parent) {
@@ -57,8 +57,8 @@ class Solution {
57
57
}
58
58
59
59
private fun dfs (u : Int , parent : Int ) {
60
- val stackPos = pathStack!! .size
61
- pathStack!! .add(u)
60
+ val stackPos = pathStack.size
61
+ pathStack.add(u)
62
62
val `val ` = nums[u]
63
63
val oldPos = lastOccur[`val `]
64
64
val oldMinIndex = minIndex
@@ -67,7 +67,7 @@ class Solution {
67
67
minIndex = oldPos + 1
68
68
}
69
69
if (minIndex <= stackPos) {
70
- val ancestor = pathStack!! [minIndex]!!
70
+ val ancestor = pathStack[minIndex]
71
71
val pathLength = dist[u] - dist[ancestor]
72
72
val pathNodes = stackPos - minIndex + 1
73
73
if (pathLength > maxLen) {
@@ -77,14 +77,14 @@ class Solution {
77
77
minNodesForMaxLen = pathNodes
78
78
}
79
79
}
80
- for (edge in adj[u]!! ) {
80
+ for (edge in adj[u]) {
81
81
val v = edge[0 ]
82
82
if (v == parent) {
83
83
continue
84
84
}
85
85
dfs(v, u)
86
86
}
87
- pathStack!! .removeAt(pathStack!! .size - 1 )
87
+ pathStack.removeAt(pathStack.size - 1 )
88
88
lastOccur[`val `] = oldPos
89
89
minIndex = oldMinIndex
90
90
}
0 commit comments