代码随想录算法训练营第三十天|leetcode452. 用最少数量的箭引爆气球、leetcode435. 无重叠区间、leetcode763.划分字母区间
1 leetcode452. 用最少数量的箭引爆气球
题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:贪心算法,判断重叠区间问题 | LeetCode:452.用最少数量的箭引爆气球_哔哩哔哩_bilibili
思路:有方法了,但是呢不知道怎么往后写,就是先找到对起始位置按照从小到大的顺序排列,然后呢就是比较第一个列表终止位置和循环内的起始位置比较,如果找到比这个终止位置大的起始位置了,那就增加一个引爆气球的值。这个局部最优可以退出全局最优,但是不会写代码
1.1 视频后的思路
和我的一模一样,但是呢我不知道如何更新
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
points.sort(key = lambda x:(x[0],x[1]))
num_p = 1
for i in range(1,len(points)):
if points[i][0]>points[i-1][1]:
num_p +=1
else:
points[i][1]=min(points[i][1],points[i-1][1])
return num_p
1.2 本题小结
- 这道题目的主要地方就是中间的加和,这里和我的思路是一模一样的,但是就是更新右边界我是没想到的,就想到了前面的循环语句
2 leetcode435. 无重叠区间
题目链接:435. 无重叠区间 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:贪心算法,依然是判断重叠区间 | LeetCode:435.无重叠区间_哔哩哔哩_bilibili
思路:哈哈哈哈哈哈,没思路的一题,想了一会儿无从下手
2.1 视频后的方法
嗯,看了视频以后,我觉得我好傻,上一题有思路这道题没有,,,
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
intervals.sort(key=lambda x:(x[0],x[1]))
count = 0
for i in range(1,len(intervals)):
if intervals[i-1][1]>intervals[i][0]:
count+=1
intervals[i][1] = min(intervals[i-1][1],intervals[i][1])
return count
2.2 本题小结
- 看视频的时候,发现自己是个大聪明,就是没想到怎么将删除的进行统计,但是其他的都是一样的
3 leetcode763.划分字母区间
题目链接:763. 划分字母区间 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:贪心算法,寻找最远的出现位置! LeetCode:763.划分字母区间_哔哩哔哩_bilibili
思路:懵啦,彻底整不会了,看视频学习吧
3.1 视频后的方法
就是有一种看完我就明白了应该怎么写的感觉,但是已经忘了如何将字符串转换成ASCII码了
class Solution:
def partitionLabels(self, s: str) -> List[int]:
last_des = {}
for key,value in enumerate(s):
last_des[value] = key
result = []
left =0
right = 0
for i,ch in enumerate(s):
right = max(right,last_des[ch])
if i == right:
result.append(right-left+1)
left = i+1
return result
3.2 本题小结
- 这道题目主要是数据的转换,不是那么的容易想到用这种方法
- 还有记录数据的时候,我也有点卡了,最后是看了视频我能明白了,希望我在二刷的时候能更得心应手一点吧
4 今日小结
- 今天的题目,怎么说呢,前两道题我是有思路的,第一题的前面我也写出来了,但是更新的后面,我写错了,不过还是思考后,感觉不一样
- 第二道题目,我在想是用哈希还是什么方法,也经过了一个阶段吧,虽然后来是看视频的,但是终归还是自己想过,在这里感受到了日积月累自己的变化了

浙公网安备 33010602011771号