Given an array of integers
In one step you can jump from index
i + 1 where:i + 1 < arr.length .i - 1 where:i - 1 >= 0 .j where:arr[i] == arr[j] andi != j .
Return the minimum number of steps to reach the last index of the array.
Notice that you can not jump outside of the array at any time.
Example 1:
Input: arr = [100,-23,-23,404,100,23,23,23,3,404] Output: 3 Explanation: You need three jumps from index 0 --> 4 --> 3 --> 9. Note that index 9 is the last index of the array.
Example 2:
Input: arr = [7] Output: 0 Explanation: Start index is the last index. You don't need to jump.
Example 3:
Input: arr = [7,6,9,6,9,6,9,7] Output: 1 Explanation: You can jump directly from index 0 to index 7 which is last index of the array.
Example 4:
Input: arr = [6,1,9] Output: 2
Example 5:
Input: arr = [11,22,7,7,7,7,7,7,7,22,13] Output: 3
Constraints:
1 <= arr.length <= 5 * 104 -108 <= arr[i] <= 108
Solution
除了正常的可以前後移動一個格的條件外
多了一個新條件,i can move to j when arr[i] = arr[j] && i != j
另外,題目要求的回傳不是是不是可以到達最後一個位置,而是最少的步數
一樣用 BFS 來解,但 queue 存的變成是 list of index
因為同一個步數下,可以有多個選擇
至於新條件的跳法,用一個 map 的方式來儲存,用過之後就刪掉
不刪掉會 TLE,因為會重複計算
kotlin
沒有留言:
張貼留言