@@ -3,28 +3,28 @@ package g3401_3500.s3425_longest_special_path
33// #Hard #2025_01_19_Time_106_(100.00%)_Space_187.68_(100.00%)
44
55class Solution {
6- private lateinit var adj: Array <ArrayList <IntArray >? >
6+ private lateinit var adj: Array <ArrayList <IntArray >>
77 private lateinit var nums: IntArray
88 private lateinit var dist: IntArray
99 private lateinit var lastOccur: IntArray
10- private var pathStack: ArrayList <Int ?> ? = null
10+ private lateinit var pathStack: ArrayList <Int >
1111 private var minIndex = 0
1212 private var maxLen = 0
1313 private var minNodesForMaxLen = 0
1414
15- fun longestSpecialPath (edges : Array <IntArray >, nums : IntArray ): IntArray? {
15+ fun longestSpecialPath (edges : Array <IntArray >, nums : IntArray ): IntArray {
1616 val n = nums.size
1717 this .nums = nums
18- adj = Array <ArrayList <IntArray >? > (n) { ArrayList <IntArray >() }
18+ adj = Array <ArrayList <IntArray >>(n) { ArrayList <IntArray >() }
1919 for (i in 0 .. < n) {
2020 adj[i] = ArrayList <IntArray >()
2121 }
2222 for (e in edges) {
2323 val u = e[0 ]
2424 val v = e[1 ]
2525 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))
2828 }
2929 dist = IntArray (n)
3030 buildDist(0 , - 1 , 0 )
@@ -36,7 +36,7 @@ class Solution {
3636 }
3737 lastOccur = IntArray (maxVal + 1 )
3838 lastOccur.fill(- 1 )
39- pathStack = ArrayList <Int ? >()
39+ pathStack = ArrayList <Int >()
4040 minIndex = 0
4141 maxLen = 0
4242 minNodesForMaxLen = Int .Companion .MAX_VALUE
@@ -46,7 +46,7 @@ class Solution {
4646
4747 private fun buildDist (u : Int , parent : Int , currDist : Int ) {
4848 dist[u] = currDist
49- for (edge in adj[u]!! ) {
49+ for (edge in adj[u]) {
5050 val v = edge[0 ]
5151 val w = edge[1 ]
5252 if (v == parent) {
@@ -57,8 +57,8 @@ class Solution {
5757 }
5858
5959 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)
6262 val `val ` = nums[u]
6363 val oldPos = lastOccur[`val `]
6464 val oldMinIndex = minIndex
@@ -67,7 +67,7 @@ class Solution {
6767 minIndex = oldPos + 1
6868 }
6969 if (minIndex <= stackPos) {
70- val ancestor = pathStack!! [minIndex]!!
70+ val ancestor = pathStack[minIndex]
7171 val pathLength = dist[u] - dist[ancestor]
7272 val pathNodes = stackPos - minIndex + 1
7373 if (pathLength > maxLen) {
@@ -77,14 +77,14 @@ class Solution {
7777 minNodesForMaxLen = pathNodes
7878 }
7979 }
80- for (edge in adj[u]!! ) {
80+ for (edge in adj[u]) {
8181 val v = edge[0 ]
8282 if (v == parent) {
8383 continue
8484 }
8585 dfs(v, u)
8686 }
87- pathStack!! .removeAt(pathStack!! .size - 1 )
87+ pathStack.removeAt(pathStack.size - 1 )
8888 lastOccur[`val `] = oldPos
8989 minIndex = oldMinIndex
9090 }
0 commit comments