中等题长期的top1, 并不考察算法或者数据结构, 纯纯折磨, 可以不看
class Solution:
def numMovesStonesII(self, stones: List[int]) -> List[int]:
n = len(stones)
stones.sort()
if stones[-1] - stones[0] + 1 == n:
return [0, 0]
ma = max(stones[-2] - stones[0] + 1, stones[-1] - stones[1] + 1) - (n - 1)
mi = n
j = 0
for i in range(n):
while j + 1 < n and stones[j + 1] - stones[i] + 1 <= n:
j += 1
if j - i + 1 == n - 1 and stones[j] - stones[i] + 1 == n - 1:
mi = min(mi, 2)
else:
mi = min(mi, n - (j - i + 1))
return [mi, ma]
明确题意,只能移动端点,且移动后不可仍旧为端点
最大操作数
可以将移动端点的过程看作是丢弃空位的过程
比如:
1 2 10
//跳法1
2 3 10 //1 跳到 3 ,丢弃了3这个空位
3 4 10
4 5 10
5