135. 分发糖果

https://leetcode-cn.com/problems/candy/
从前往后遍历,每次和前面一个元素比。
从后往前遍历,每次和后面一个元素比

  1. class Solution:
  2. def candy(self, ratings: List[int]) -> int:
  3. res = [1]*len(ratings)
  4. for i in range(1,len(ratings)):
  5. if ratings[i] > ratings[i-1]:
  6. res[i]=res[i-1] + 1
  7. for i in range(len(ratings)-2,-1,-1):
  8. if ratings[i] > ratings[i+1] and res[i]<=res[i+1]:
  9. res[i]=res[i+1] + 1
  10. return sum(res)

435. 无重叠区间

https://leetcode-cn.com/problems/non-overlapping-intervals/
这道题说的是算出需要移除区间的最少数量,那我们就要尽可能的把右边界小的区间留下来,如果区间交叉了,不更新边界,因为是用右边界排序的, 如果没有交叉,那更新目前无重叠区间的右边界

  1. class Solution:
  2. def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
  3. if len(intervals) < 2:
  4. return 0
  5. count = 0
  6. intervals = sorted(intervals, key = lambda a:a[1])
  7. end = intervals[0][1]
  8. for s,e in intervals[1:]:
  9. if s < end:
  10. count+=1
  11. else:
  12. end = e
  13. return count