主要是需要搞清楚移動的方式,接下來就很簡單了。
### 題目
三枚石子放置在數軸上,位置分別為 a,b,c。
每一回合,我們假設這三枚石子當前分別位於位置 x, y, z 且 x < y < z。從位置 x 或者是位置 z 拿起一枚石子,並將該石子移動到某一整數字置 k 處,其中 x < k < z 且 k != y。
當你無法進行任何移動時,即,這些石子的位置連續時,遊戲結束。
要使遊戲結束,你可以執行的最小和最大移動次數分別是多少? 以長度為 2 的陣列形式返回答案:answer = [minimum_moves, maximum_moves]
### 思路
首先將三個數排好序,然後算出中間節點與兩邊節點的距離,根據距離的大小,分別對應下面的幾種情況,第一種,三者互相挨著,這樣距離就是1和1,無法移動,輸出{0,0},第二種情況,一邊是挨著的,另外一邊沒有挨著,這種情況就是最少移動次數一次移到挨著的位置,最多移動另一邊的距離減一次,所以結果為{1,l2-1}或{l1-1,1},第三種情況,某一邊是與中間節點相隔1位,那麼最少移動次數為1次,只需要將邊上的石子移動到中間就可以了,最多移動次數就是l1+l2-2,因為我們不確定是哪一邊相隔一位,所以就寫成這樣的形式,第四種情況就是兩邊與中間節點都相隔超過一位,那麼最少移動次數就是2,最多移動次數也是l1+l2-2。
### code
vectornummovesstones(int a, int b, int c) ;
}if(l1==1&&l2>1);}
if(l1>1&&l2==1);}
if(l1==2||l2==2);}
return ;
}
LeetCode 1033 移動石子直到連續
三枚石子放置在數軸上,位置分別為 a,b,c。每一回合,我們假設這三枚石子當前分別位於位置 x,y,z 且 x y z。從位置 x 或者是位置 z 拿起一枚石子,並將該石子移動到某一整數字置 k 處,其中 x k z 且 k y。當你無法進行任何移動時,即,這些石子的位置連續時,遊戲結束。要使遊戲結...
1033 移動石子直到連續
三枚石子放置在數軸上,位置分別為a,b,c。每一回合,我們假設這三枚石子當前分別位於位置x,y,z且x y z。從位置x或者是位置z拿起一枚石子,並將該石子移動到某一整數字置k處,其中x k z且k y。當你無法進行任何移動時,即,這些石子的位置連續時,遊戲結束。要使遊戲結束,你可以執行的最小和最大...
1033 移動石子直到連續
三枚石子放置在數軸上,位置分別為 a,b,c。每一回合,我們假設這三枚石子當前分別位於位置 x,y,z 且 x y z。從位置 x 或者是位置 z 拿起一枚石子,並將該石子移動到某一整數字置 k 處,其中 x k z 且 k y。當你無法進行任何移動時,即,這些石子的位置連續時,遊戲結束。要使遊戲結...