代码随想录算法训练营第三十六天
763.划分字母区间
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.12
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/partition-labels/
from typing import List
class Solution:
"""
遍历两次,第一次遍历找到元素最远index,第二次遍历找到元素index=最远index
"""
def partitionLabels(self, s: str) -> List[int]:
dict = {}
result = []
start = 0
max_index = 0
for i in range(len(s)):
dict[s[i]] = i
for i in range(len(s)):
max_index = max(max_index, dict[s[i]])
if i == max_index:
result.append(i - start + 1)
start = i + 1
return result
if __name__ == '__main__':
s = "ababcbacadefegdehijhklij"
ss = Solution()
print(ss.partitionLabels(s))
56. 合并区间
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.12
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/merge-intervals/
from typing import List
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort(key=lambda x: (x[0], x[1]))
result = []
start = intervals[0][0]
end = intervals[0][1]
index = 1
while index < len(intervals):
if end < intervals[index][0]:
result.append([start, end])
start = intervals[index][0]
end = intervals[index][1]
else:
end = max(end, intervals[index][1])
index += 1
result.append([start, end])
return result
if __name__ == '__main__':
intervals = [[1, 3], [2, 6], [8, 10], [15, 18]]
s = Solution()
print(s.merge(intervals))
435. 无重叠区间
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.12
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/non-overlapping-intervals/
from typing import List
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
intervals.sort(key=lambda x: (x[0], x[1]))
remove_num = 0
start = 1
min_right = intervals[0][1]
while start < len(intervals):
if min_right > intervals[start][0]:
remove_num += 1
min_right = min(min_right,intervals[start][1])
else:
min_right = intervals[start][1]
start += 1
return remove_num
if __name__ == '__main__':
intervals = [[-52,31],[-73,-26],[82,97],[-65,-11],[-62,-49],[95,99],[58,95],[-31,49],[66,98],[-63,2],[30,47],[-40,-26]]
s = Solution()
print(s.eraseOverlapIntervals(intervals))