lintcode 797 到達乙個數字

2021-09-25 22:35:56 字數 1065 閱讀 5881

你站在乙個無窮數軸上的 0 位置。在位置目標上有乙個目標。

在每乙個動作中,你可以向左或向右。在第n次移動中(從1開始),你行走n步。

返回到達目的地所需的最小步驟數。

樣例

樣例1輸入: target = 3

輸出: 2

解釋:在第一步,我們從0到1。

在第二步,我們從1到3。

樣例2輸入: target = 2

輸出: 3

解釋:在第一步,我們從0到1。

在第二個步驟中,我們從1到-1。

在第三步,從-1到2。

注意事項

目標將是乙個非零的整數範圍[-10^9, 10^9]。

思路:先將數加到大於目標數,並得到當前步數。

1、如果步數和剛好為目標數,則直接返回步數。如6=1+2+3.

2、如果步數-目標數為偶數,如目標數為4,而6=1+2+3.此時可以得到二者差值為6-4=2。差值的一半為1,把差值一半變為-即可得到,即4=-1+2+3.故答案仍舊為第一次大於目標數的步數。

3、如果步數-目標為奇數,且步數為偶數,如目標數為20,21=1+2+3+4+5+6,此時需要加上乙個奇數,21+7=28為偶數,減去目標數為偶數,再重複步驟二,故答案為步數+1.

4、如果步數-目標數為奇數,且步數為奇數,如目標數12,15=1+2+3+4+5,同理此時應該加上下乙個偶數和下下乙個奇數使其和目標數之差為偶數,再重複步驟二,故答案為步數+2.

class solution 

temp--;

if(sum==target) return temp;

sum-=target;

if(sum%2==0) return temp;//如果二者差為偶數,這只需要在大於的基礎上直接減掉乙個數即可

else if(temp%2==0) return temp+1;//兩者差為奇數,且step為偶數,則在原基礎上加下乙個,並將二者差值/2減去

else return temp+2;//如果step為奇數,則應該先增加乙個再減去乙個,再同上乙個辦法。

}};

797 到達乙個數字

中文english 你站在乙個無窮數軸上的0位置。在位置目標上有乙個目標。在每乙個動作中,你可以向左或向右。在第n次移動中 從1開始 你行走n步。返回到達目的地所需的最小步驟數。樣例1輸入 target 3 輸出 2 解釋 在第一步,我們從0到1。在第二步,我們從1到3。樣例2 輸入 target ...

Lintcode 上乙個排列

給定乙個整數陣列來表示排列,找出其上乙個排列。注意事項 排列中可能包含重複的整數 您在真實的面試中是否遇到過這個題?yes 樣例給出排列 1,3,2,3 其上乙個排列是 1,2,3,3 給出排列 1,2,3,4 其上乙個排列是 4,3,2,1 標籤 排列 思路 逆序找到第乙個不是遞減的數字置為i,從...

Lintcode 上乙個排列

給定乙個整數陣列來表示排列,找出其上乙個排列。樣例 給出排列 1,3,2,3 其上乙個排列是 1,2,3,3 給出排列 1,2,3,4 其上乙個排列是 4,3,2,1 解釋 所謂的上乙個排列其實就是把給定數字組合,並從大到小排列,找到與給定排列最接近,且比它小的排列 即其上乙個排列 比如 1,3,2...