435.无重叠区间
题目链接:https://leetcode.cn/problems/non-overlapping-intervals/
其实就是控制一个方向
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
intervals.sort(key=lambda x: x[1])
count = 0
cur_num = intervals[0][1]
for i in range(1, len(intervals)):
if cur_num <= intervals[i][0]:
count += 1
cur_num = intervals[i][1]
return len(intervals) - count -1
763.划分字母区间
题目链接:https://leetcode.cn/problems/partition-labels/
个人认为这个应该属于哈希的,不应该是贪心
将每个字母最后出现的index记录 就可以找到分割点
class Solution:
def partitionLabels(self, s: str) -> List[int]:
hash = [0]*26
for index in range(len(s)):
hash[ord(s[index]) - ord('a')] = index
res = []
l,r = 0, 0
for i in range(len(s)):
r = max(r, hash[ord(s[i]) - ord('a')])
if i == r:
res.append(r+1-l)
l = i + 1
return res
56.合并区间
题目链接:https://leetcode.cn/problems/merge-intervals/
单纯控制区间,虽然carl哥说这道题最难,但我觉得还好,尤其是做了前面第一道题
但是我的代码可以明显感觉可以优化 base case那边
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort(key=lambda x: x[0])
res = []
if len(intervals) == 0:
return []
if len(intervals) == 1:
return [[intervals[0][0],intervals[0][1]]]
for i in range(1, len(intervals)):
if intervals[i][0] <= intervals[i-1][1]:
intervals[i][0] = intervals[i-1][0]
intervals[i][1] = max(intervals[i-1][1], intervals[i][1])
else:
res.append([intervals[i-1][0], intervals[i-1][1]])
if i == len(intervals)-1:
res.append([intervals[i][0],intervals[i][1]])