最小跳躍次數

2021-08-18 13:34:01 字數 1990 閱讀 4675

出自華為實習機試第二題:

先輸入乙個數字代表數字總數

然後依次輸入幾個數字,代表當前位置能跳躍的最大步數,求到最後乙個位置的最小跳躍次數。

示例

輸入:

7 2

3 2

1 2

1 5

代表輸入7個數,最小跳躍次數為3,可以是從2-2-2-5或者2-3-2-5,都是跳躍三次

輸出為3

仔細閱讀一下題目,可以考慮遍歷搜尋的方法,也可以是動態規劃,用迭代的方式來做,在時間複雜度和空間複雜度上都能有優勢。

將一組數記為:a0

,a1,

a2,.

..,a

n a0,

a1,a

2,..

.,an

, 調到第

i i

個數的最小跳躍次數為re

si' role="presentation">res

ires

i。 則迭代公式為: re

s1=0

r es

1=

0res

i=mi

n(re

sk+1

ifak

−i+k

>=0|

k=0,

...,

i−1)

,i>

1 res

i=mi

n(re

sk+1

ifak

−i+k

>=0|

k=0,

...,

i−1)

,i

>

1迭代結果如下:i0

1234

56aiai

23

2121

5102

1①31

1①4*

22②5

*223

②6**

**3③

7***

*33③

第i i

行的①代表si

=1' role="presentation">si=

1si=

1,②代表si

=2s i=

2,

i i

行j' role="presentation">j

j列的數表示re

sk+1

r es

k+

1,且滿足ak

−i+k

>=

0 ak−

i+

k>=

0即從第

i i

個數可以一步調到第

j' role="presentation">j

j個數

i i

行j' role="presentation">jj列的

∗ ∗

表示不滿足ak

−i+k

>=

0' role="presentation">ak−

i+k>=0a

k−i+

k>=

0,即從第

i i

個數無法一步調到第

j' role="presentation">jj個數

// test_huawei.cpp: 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

using

namespace

std;

int main()

}res[0] = 0;

int temp = int_max;

for (int i = 1; i < n; i++)

}res[i] = temp;

}cout

<< res[n-1] << endl;

return

0;}

LeetCode LCP 09 最小跳躍次數

首先理解題意 有n個小球從 0 到 n 1 排序,然後每個小球都可以跳躍到當前位置記錄的值上,同時可以任意的跳躍到左邊,當然0的時候只能向右跳躍。例如 jump 2,5,1,1,1,1 當小球在0的位置上時,只能夠向右跳2位即達到jump 2 上當到達a 2 的時候就可以左右橫跳了,當然只能向右一位...

跳躍遊戲II(最少的可達跳躍次數)

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...

1654 到家的最少跳躍次數

題目描述 有乙隻跳蚤的家在數軸上的位置 x 處。請你幫助它從位置 0 出發,到達它的家。跳蚤跳躍的規則如下 它可以 往前 跳恰好 a 個位置 即往右跳 它可以 往後 跳恰好 b 個位置 即往左跳 它不能 連續 往後跳 2 次。它不能跳到任何 forbidden 陣列中的位置。跳蚤可以往前跳 超過 它...