Given an array of integers `arr`, you are initially positioned at the **first** index of the array. In one step you can jump from index `i` to index: - `i + 1` where `i + 1 < arr.length`. - `i - 1` where `i - 1 >= 0`. - `j` where `arr[i] == arr[j]` and `i != 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: 0→4 (equal 100), 4→3 (adjacent), 3→9 (equal 404). Three steps to the last index.
Example 2
Input: arr = [7]
Output: 0
Explanation: Already at the last (and only) index — zero steps.
Example 3
Input: arr = [7,6,9,6,9,6,9,7]
Output: 1
Explanation: Index 0 and index 7 both hold 7, so a single teleport jumps straight to the end.
This is a shortest-path (fewest steps) problem, so BFS. From i you can step to i-1, i+1, or teleport to any index sharing arr[i]'s value. Group indices by value up front; after using a value group once, clear it so the whole group is never scanned again — that keeps BFS linear.
Run checks all cases above. Submit evaluates all test cases.