1 class Solution: 2 def longestWPI(self, hours: 'List[int]') -> int: 3 longest = 0 4 hours = [0] + hours 5 n = len(hours) 6 for i in range(n): 7 if i == 0: 8 continue 9 pre = hours[i-1] 10 if pre > 8: 11 continue 12 act = 0 13 neg = 0 14 curlong = 0 15 borderlong = 0 16 begin,end = 1,n-1 17 for j in range(i,n): 18 if hours[j] > 8: 19 act += 1 20 else: 21 neg += 1 22 if act > neg: 23 borderlong = j - i + 1 24 if borderlong > longest: 25 longest = max(longest,borderlong) 26 begin = i 27 end = j 28 if end == n - 1: 29 return longest 30 else: 31 i = begin 32 33 return longest
这道题目没太看懂,尝试了几回,只能作出TLE的解。算法
看了一下别人的方案,也没弄明白,这题很迷。curl
14%的Acceptance,我估计很多参赛的选手都遇到了障碍。url
最近几期的leetcode周赛和双周赛,题目质量整体来讲不是很好,有些题目简单的没有算法思想,有些题目又很怪很偏。spa
对于大神们来说,“什么妖魔鬼怪什么美女画皮,什么刀山火海什么陷阱诡计”,都挡不住大神们的火眼金睛和如意棒。code
对于像我这样的菜鸟,跟这样的妖题怪题难题动手,未可以建功立业,反误了卿卿性命。orm
降妖除魔的任务就交给大神们了,我等凡夫俗子,仍是作好围观群众的本职工做吧。blog
1 class Solution: 2 def longestWPI(self, hours: List[int]) -> int: 3 res = score = 0 4 seen = {} 5 for i, h in enumerate(hours): 6 score = score + 1 if h > 8 else score - 1 7 if score > 0: 8 res = i + 1 9 seen.setdefault(score, i) 10 if score - 1 in seen: 11 res = max(res, i - seen[score - 1]) 12 return res