leetcode1040移动石子

中等题长期的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

你可能感兴趣的:(算法,算法,leetcode,职场和发展)