435. 无重叠区间
题目描述: 435. 无重叠区间.
解法
贪心
class Solution(object):
def eraseOverlapIntervals(self, intervals):
if not intervals:
return 0
intervals.sort(key=lambda x:x[0])
length = len(intervals)
count = 1
l,r = intervals[0]
for i in range(1,length):
if intervals[i][0] >= r:
count += 1
l,r = intervals[i]
else:
r = min(r,intervals[i][1])
return length-count
和气球差不多,一定要注意更新r指针的位置,更新为两个区间的最小值,其实也应该更新l指针,但是由于使用l的大小进行排序了,所以l指针更新不更新都无所谓了。
763.划分字母区间
题目描述: 763.划分字母区间.
解法
贪心
class Solution(object):
def partitionLabels(self, s):
hashmap = {}
for i in range(len(s)):
hashmap[s[i]] = i
result = []
start = 0
end = 0
max_pos = -1
while end < len(s):
max_pos = max(max_pos,hashmap[s[end]])
if end == max_pos:
result.append(end - start + 1)
start = end + 1
end += 1
return result
这个思路非常巧妙,考虑每个字母第一次出现的区间即可,累计最大区间,如果遍历到了最大区间的位置,就是当前字符串的截断位置。
56. 合并区间
题目描述: 56. 合并区间.
解法
贪心
class Solution(object):
def merge(self, intervals):
if not intervals:
return []
intervals.sort(key=lambda x : x[0])
result = []
result.append(intervals[0])
for i in range(1,len(intervals)):
if intervals[i][0] <= result[-1][1]:
result[-1][1] = max(result[-1][1],intervals[i][1])
else:
result.append(intervals[i])
return result
基本和之前的区间问题差不多。