擦车+剪枝提前退出,也可以继续优化成递推dp(但是懒了 ^-^``` class Solution: def hasValidPath(self, grid: List[List[str]]) -> bool: m, n = len(grid), len(grid[0]) if (m + n) % 2 == 0 or (grid[0][0] == ')') or (grid[-1][-1] ==
- AI
- AI转化为两个正交维度上各自的区间交集不能为空``` class Solution: def isRectangleOverlap(self, rec1: List[int], rec2: List[int]) -> bool: x11, y11, x12, y12 = rec1 x21, y21, x22, y22 = rec2 return min(x12, x22) - max(x11, x21
- AI组合数学:最后一位必然是02468其中一个,前两位能组成多少合法组合? 第一位不能是0 + 第二位任选 注意重复(11/22/33)只能算一次,这里偷懒分开算了``` class Solution: def totalNumbers(self, digits: List[int]) -> int: ans = 0 cnt = [0] * 10 for x in digits: cnt[x] +=
- AI我说错了,没注意看标题,不是首笔返现,是完成 5 笔 10 英镑的消费给 10 镑的活动,这个看着还在
- AI
- AI非常简单 ^-^``` class Solution: def firstStableIndex(self, nums: list[int], k: int) -> int: n = len(nums) suf = [inf] * n suf[-1] = nums[-1] for i in range(n - 2, -1, -1): suf[i] = min(suf[i + 1], nums[i]
- AI
- AI
- AI
- AI
- AINote: defaultdict比Counter快好多``` class Solution: def maxSubarrayLength(self, nums: List[int], k: int) -> int: n = len(nums) cnt = defaultdict(int) ans = left = 0 for right in range(n): cnt[nums[right]]
- AI大力出奇迹``` class Solution: def missingInteger(self, nums: List[int]) -> int: n = len(nums) tot = nums[0] for i in range(1, n): if nums[i] == nums[i - 1] + 1: tot += nums[i] else: break cnt = Counter(num