更多精彩內(nèi)容,請關(guān)注【力扣簡單題】。
題目
難度:★★☆☆☆
類型:數(shù)組,益智
三枚石子放置在數(shù)軸上,位置分別為 a,b,c。
每一回合,我們假設(shè)這三枚石子當(dāng)前分別位于位置 x, y, z 且 x < y < z。從位置 x 或者是位置 z 拿起一枚石子,并將該石子移動(dòng)到某一整數(shù)位置 k 處,其中 x < k < z 且 k != y。
當(dāng)你無法進(jìn)行任何移動(dòng)時(shí),即,這些石子的位置連續(xù)時(shí),游戲結(jié)束。
要使游戲結(jié)束,你可以執(zhí)行的最小和最大移動(dòng)次數(shù)分別是多少? 以長度為 2 的數(shù)組形式返回答案:answer = [minimum_moves, maximum_moves]
提示
1 <= a <= 100
1 <= b <= 100
1 <= c <= 100
a != b, b != c, c != a
示例
示例 1
輸入:a = 1, b = 2, c = 5
輸出:[1, 2]
解釋:將石子從 5 移動(dòng)到 4 再移動(dòng)到 3,或者我們可以直接將石子移動(dòng)到 3。
示例 2
輸入:a = 4, b = 3, c = 2
輸出:[0, 0]
解釋:我們無法進(jìn)行任何移動(dòng)。
解答
參考大佬解答
每次只能移動(dòng)最左側(cè),或者最右側(cè)的石子往中間移動(dòng)。所以z-x的值是逐漸收斂的。
最大次數(shù)就是一步一步往中間挪,所需的步數(shù)是z-x-2。因?yàn)閦和x之間能移動(dòng)的空間是z-x-1,還要去掉一個(gè)y占的位置,所以最終移動(dòng)的最多步數(shù)是z-x-2。
最小步數(shù)呢?
最小值為0:如果x,y,z三個(gè)值本身就挨著,那么不用移動(dòng)就游戲結(jié)束了。
最小值為1:如果x和y之間只有一個(gè)位置,那么z移動(dòng)到這個(gè)空位,只移動(dòng)1次也就結(jié)束了。
最小值為2:除了上面兩種情況,每次都把x移動(dòng)到y(tǒng)-1或把z移動(dòng)到y(tǒng)+1,那么只要兩步就結(jié)束了。
class Solution(object):
def numMovesStones(self, a, b, c):
num = sorted([a, b, c])
mm = num[2]-num[0]-2
if num[2]-num[1] > 2 and num[1]-num[0] > 2:
nn = 2
elif num[2]-num[0] == 2:
nn = 0
else:
nn = 1
return[nn, mm]
如有疑問或建議,歡迎評(píng)論區(qū)留言~