leetcode刷题笔记——贪心算法
目前完成的贪心相关的leetcode算法题序号:
中等:763
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reconstruct-itinerary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
文章目录
算法理解
顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。
提示:以下是贪心算法相关的刷题笔记
一、763题:划分字母区间
1.题干
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。
2.思路
本次的解题思路包括五个步骤:
1)计算字符串中每个字符最后一次出现的索引;
2)要使得“同一个字母只出现在一个片段中”,就需要在某个片段中,所有的字符最后出现的索引值小于片段的最右端;
3)要使得尽可能多的划分片段,就要在字符串每次出现步骤2中情况的时候就进行划分;
3.代码
class Solution:
def partitionLabels(self, S: str) -> List[int]:
last_index = [0] * 26
#查询每个字符在字符串中最后出现的位置的索引值
for i, ch in enumerate(S):
last_index[ord(ch) - ord("a")] = i
####这种需要计算区间长度的问题,用双指针会比较方便,省去了计数值不断赋值和恢复的问题!!!
left, right = 0, 0
counts = 0
res = []
for i, ch in enumerate(S):
#右指针每次都更新为S当前位置下,前面所有字符最终出现位置的最大值
right = max(right, last_index[ord(ch) - ord(