435. 无重叠区间
基于左边界排序
class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:count = 0 # 需要移除的区间数量intervals.sort(key=lambda x: x[0])for i in range(1, len(intervals)):if intervals[i][0] < intervals[i-1][1]:count += 1intervals[i][1] = min(intervals[i-1][1], intervals[i][1])return count
763.划分字母区间
确实和贪心没啥关系
先找到每个字符出现的最远距离,分割点为该分割字符串所有字符最大的最远距离
class Solution:def partitionLabels(self, s: str) -> List[int]:hash = [0]*26for i in range(len(s)):hash[ord(s[i])-ord('a')] = ileft = 0right = 0result = []for i in range(len(s)):right = max(hash[ord(s[i])-ord('a')], right)if right == i:result.append(right - left + 1)left = i + 1return result
56. 合并区间
能自己做出来,有进步的
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key=lambda x: x[0])result = []left = intervals[0][0]for i in range(1, len(intervals)):if intervals[i][0] <= intervals[i-1][1]:intervals[i][1] = max(intervals[i][1], intervals[i-1][1])else:result.append([left, intervals[i-1][1]])left = intervals[i][0]result.append([left, intervals[-1][1]])return result
题解的代码更简洁
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key=lambda x: x[0])result = [intervals[0]]for i in range(1, len(intervals)):if intervals[i][0] <= result[-1][-1]:result[-1][-1] = max(intervals[i][1], result[-1][-1])else:result.append(intervals[i])return result