跳躍遊戲 IV

2021-10-23 11:29:22 字數 1850 閱讀 1290

問題描述 :

給你乙個整數陣列 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的...