題目鏈接
難度:簡單 ??????類型: 數(shù)組
三枚石子放置在數(shù)軸上,位置分別為 a,b,c。
每一回合,我們假設這三枚石子當前分別位于位置 x, y, z 且 x < y < z。從位置 x 或者是位置 z 拿起一枚石子,并將該石子移動到某一整數(shù)位置 k 處,其中 x < k < z 且 k != y。
當你無法進行任何移動時,即,這些石子的位置連續(xù)時,游戲結束。
要使游戲結束,你可以執(zhí)行的最小和最大移動次數(shù)分別是多少? 以長度為 2 的數(shù)組形式返回答案:answer = [minimum_moves, maximum_moves]
示例1
輸入:a = 1, b = 2, c = 5
輸出:[1, 2]
解釋:將石子從 5 移動到 4 再移動到 3,或者我們可以直接將石子移動到 3。
示例2
輸入:a = 4, b = 3, c = 2
輸出:[0, 0]
解釋:我們無法進行任何移動。
解題思路
三個值先從小到大排序
最大值:左右兩端一步一步向b移動,a到c一共又c-a-2個空格
最小值:1. 如果a貼著b,a不用移動,沒貼著就移動一步就可以,c同理
2.如果a和b中間空了一格,把c一步一進去就行,c和b只空一格同理
代碼實現(xiàn)
class Solution(object):
def numMovesStones(self, a, b, c):
"""
:type a: int
:type b: int
:type c: int
:rtype: List[int]
"""
a, b, c = sorted([a,b,c])
max_moves = c - a -2
min_moves = 1 if b-a==2 or c-b ==2 else min(b-a-1, 1) + min(c-b-1,1)
return [min_moves, max_moves]