問題描述 :
給你乙個整數陣列 arr ,你一開始在陣列的第乙個元素處(下標為 0)。
每一步,你可以從下標 i 跳到下標:
i + 1 滿足:i + 1 < arr.length
i - 1 滿足:i - 1 >= 0
j 滿足:arr[i] == arr[j] 且 i != j
請你返回到達陣列最後乙個元素的下標處所需的最少操作次數 。
注意:任何時候你都不能跳到陣列外面。
示例 1:
輸入:arr = [100,-23,-23,404,100,23,23,23,3,404]
輸出:3
解釋:那你需要跳躍 3 次,下標依次為 0 --> 4 --> 3 --> 9 。下標 9 為陣列的最後乙個元素的下標。
示例 2:
輸入:arr = [7]
輸出:0
解釋:一開始就在最後乙個元素處,所以你不需要跳躍。
示例 3:
輸入:arr = [7,6,9,6,9,6,9,7]
輸出:1
解釋:你可以直接從下標 0 處跳到下標 7 處,也就是陣列的最後乙個元素處。
示例 4:
輸入:arr = [6,1,9]
輸出:2
示例 5:
輸入:arr = [11,22,7,7,7,7,7,7,7,22,13]
輸出:3
輸入說明 :
首先輸入陣列arr的長度n,
然後輸入n個整數,以空格分隔。
1 <= n <= 5 * 10^4
-10^8 <= arr[i] <= 10^8
輸出說明 :
輸出乙個整數,表示到達陣列最後乙個元素的下標處所需的最少操作次數
輸入範例 :
10100 -23 -23 404 100 23 23 23 3 404
輸出範例 :
3
#include
#include
#include
#include
using
namespace std;
intminjumps
(vector<
int>
& arr)
same[pre_val]
.push_back
(pre_i)
; pre_i = i;
pre_val = val;
same[pre_val]
.push_back
(pre_i);}
vector<
int>
vi(arr.
size()
,0);
queue<
int> que;
que.
push(0
);while
(!que.
empty()
)if(q != arr.
size()
-1&& vi[q +1]
==0)auto s = same[arr[q]];
for(
int i = s.
size()
-1; i >=
0; i--)}
return vi[arr.
size()
-1];
}int
main()
int res=
minjumps
(arr)
; cout
}
1345 跳躍遊戲 IV
給你乙個整數陣列 arr 你一開始在陣列的第乙個元素處 下標為 0 每一步,你可以從下標 i 跳到下標 i 1 滿足 i 1 arr.length i 1 滿足 i 1 0 j 滿足 arr i arr j 且 i j 請你返回到達陣列最後乙個元素的下標處所需的 最少操作次數 注意 任何時候你都不能...
leetcode 1345 跳躍遊戲 IV
給你乙個整數陣列 arr 你一開始在陣列的第乙個元素處 下標為 0 每一步,你可以從下標 i 跳到下標 i 1 滿足 i 1 arr.length i 1 滿足 i 1 0 j 滿足 arr i arr j 且 i j請你返回到達陣列最後乙個元素的下標處所需的最少操作次數 注意 任何時候你都不能跳到...
LintCode 跳躍遊戲 I VS跳躍遊戲 II
陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。分析 方法一 基於動態規劃的做法,時間複雜度o n 2 陣列dp i 表示能否到達下標為i的位置,對於從下標i 1開始的每乙個位置,都從下標j 0開始到i 1判斷能否到達j,並且判斷從j開始最遠能否跳到或超過i的...