Leetcode刷题第一天-贪心
455-分饼干
优先使用最小饼干满足最小胃口,一个娃只能分一个饼干T_T不能加
1 class Solution:
2 def findContentChildren(self, g: List[int], s: List[int]) -> int:
3 if not g or not s: return 0
4 g.sort()
5 s.sort()
6 i,j,re=0,0,0
7 while True:
8 if(i==len(g) or j==len(s)): break
9 if(s[j]>=g[i]):
10 re+=1
11 i+=1
12 j+=1
13 else:
14 j+=1
15 return re
135-分糖果
所有孩子糖果默认为1,从左往右找,右>左,右+1;再从右往左找,左>右,而且左孩糖<=右孩糖,左+1
1 class Solution:
2 def candy(self, ratings: List[int]) -> int:
3 if(not ratings): return 0
4 sweet=[1 for i in range(len(ratings))]
5 for i in range(len(ratings)-1):
6 if(ratings[i]<ratings[i+1]):
7 sweet[i+1]=sweet[i]+1
8 for i in range(len(ratings)-1,0,-1):
9 if(ratings[i]<ratings[i-1] and sweet[i]>=sweet[i-1]):
10 sweet[i-1]=sweet[i]+1
11 return sum(sweet)
435-无重复区间
所有区间有边界排序,留右边界最小值,才能使剩下的区间个数最大,依次检查区间的左边界是否大于最小右边界,小于,移除
1 class Solution:
2 def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
3 if(not intervals): return 0
4 lens=len(intervals)
5 re=0
6 flage=[0 for i in range(lens)]
7 intervals.sort(key=lambda x:x[1])
8 for i in range(lens-1):
9 if(flage[i]): continue
10 flage[i]=1
11 for j in range(i,lens):
12 if(flage[j]): continue
13 if(intervals[j][0]<intervals[i][1]):
14 flage[j]=1
15 re+=1
16 return re
605-种花问题
当前是1,上下两个坑无论是啥都不能种花,当前是0,下一个是1,不能种,当前是0,上一个是1下一个是0,不能种,当前是0,上一个是0下一个是0,能种
1 class Solution:
2 def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
3 if(not flowerbed): return False
4 if(n>flowerbed.count(0)): return False
5 next_fl=True
6 nums=0
7 for i in range(len(flowerbed)-1):
8 if(flowerbed[i]==1): next_fl=False
9 else:
10 if(next_fl and not flowerbed[i+1]):
11 nums+=1
12 next_fl=False
13 else: next_fl=True
14 if(n<=nums): return True
15 if(next_fl and not flowerbed[len(flowerbed)-1]): nums+=1
16 if(n<=nums): return True
17 return False
452-最少箭
链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)
1 class Solution:
2 def findMinArrowShots(self, points: List[List[int]]) -> int:
3 if(not points): return 0
4 points.sort(key=lambda x:x[1])
5 flage=[0 for i in range(len(points))]
6 nums=0
7 for i in range(len(points)):
8 if(flage[i]): continue
9 flage[i]=1
10 for j in range(i,len(points)):
11 if(flage[j]): continue
12 if(points[j][0]<=points[i][1]):
13 flage[j]=1
14 nums+=1
15 return nums
736-划分字母区间
找到字母起始位置和终止位置,范围内的字符和范围后的字符串对比,在后面字符串中,终止位置变更为当前字符的终止位置
1 class Solution:
2 def partitionLabels(self, s: str) -> List[int]:
3 if(not s): return [0]
4 new_strs=s[::-1]
5 re=[]
6 last,i,lens=0,0,len(s)
7 flage=True
8 first_id=s.find(s[0])
9 end_id=lens-new_strs.find(s[0])
10 while i<=lens:
11 if(end_id==lens):
12 re.append(lens-first_id)
13 break
14 for j in s[first_id:end_id]:
15 if(j in s[end_id:]):
16 end_id=lens-new_strs.find(j)
17 flage=False
18 break
19 if(flage):
20 re.append(end_id-first_id)
21 i=end_id
22 first_id=s.find(s[i])
23 end_id=lens-new_strs.find(s[i])
24 else:
25 i=end_id
26 flage=True
27 return re
122-买卖股票
链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)
收集每一天的最大利润
1 class Solution:
2 def maxProfit(self, prices: List[int]) -> int:
3 if(not prices): return 0
4 money,i=0,0
5 lens=len(prices)
6 for i in range(1,lens):
7 money+=max(0,prices[i]-prices[i-1])
8 return money
406-身高排序
链接:406. 根据身高重建队列 - 力扣(LeetCode)
先按照身高排序,保证高个前没有比它高的,相同高度,按照个数排,个数少的在后面
1 class Solution:
2 def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
3 if(not people): return people
4 people.sort(key=lambda x:[x[0],-x[1]],reverse=True)
5 lens=len(people)
6 re=[]
7 for p in people:
8 re.insert(p[1],p)
9 return re
Leetcode刷题第一天-贪心的更多相关文章
- LeetCode刷题第一天
1 . 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用 ...
- leetcode刷题第一日<两数和问题>
开始就用到了c++的哈希表是真的恶心,首先学习一波基础知识 https://blog.csdn.net/u010025211/article/details/46653519 下面放下大佬的代码 cl ...
- C#LeetCode刷题-贪心算法
贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配 17.8% 困难 45 跳跃游戏 II 25.5% 困难 55 跳跃游戏 30.6% 中等 122 买卖股票的最佳时机 II C ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- leetcode刷题--两数之和(简单)
一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- LeetCode刷题总结之双指针法
Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
随机推荐
- 前端科普系列(4):Babel —— 把 ES6 送上天的通天塔
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/plJewhUd0xDXh3Ce4CGpHg作者:Morrain 一.前言 在上一节 < ...
- 三、springboot集成达梦
1.数据库中创建表 1.数据库中创建表 CREATE TABLE TEST_BLOCK_T ( BLOCK_ID VARCHAR2(10 BYTE) PRIMARY KEY, --编码 BLOCK_N ...
- macOX常用快捷键(结尾有彩蛋)
macOX的快捷键与windows10有所不同,了解了以后会更加提高我们的工作效率. Mac中主要有四个修饰键,分别是Command,Control,Option和Shift. 一.基本的快捷键: C ...
- 机器学习-无监督机器学习-密度聚类DBSCAN-19
目录 1. DBSCAN 2. OPTICS 2. MeanShift 1. DBSCAN Density based clustering DBSCAN不要求我们指定cluster簇的数量,避免了异 ...
- python pip手动安装二进制包
python中使用pip安装扩展包的时候,有时候会遇到如下类似报错: Running setup.py install for mysqlclient ... error ...(中间报错信息省略) ...
- 【架构师视角系列】Apollo配置中心之Client端(二)
原创文章,转载请标注.https://www.cnblogs.com/boycelee/p/17978027 目录 声明 配置中心系列文章 一.客户端架构 1.Config Service职责 (1) ...
- 基于Html+腾讯云播SDK开发的m3u8播放器
周末业余时间在家无事,学习了一下腾讯的云播放sdk,并制作了一个小demo(m3u8播放器),该在线工具是基于腾讯的云播sdk开发的,云播sdk非常牛,可以支持多种播放格式. 预览地址 m3u8pla ...
- Linux复习笔记
Linux复习笔记 常识说明 目录结构 Linux以树型结构管理文件,其最上层文件夹为 / ,也就是根目录. 如图所示,图中展示了一部分文件夹的结构: 所有的文件夹都属于根目录的子文件夹. 安装好系统 ...
- Go-数据类型-数字
Go数字类型 整数 int 类 int(在32机器上为int32,在64位机器上为int64) int8 int16 int32 int64 unit类 uint(在32机器上为uint32,在64位 ...
- 使用requests爬虫遇到的一个奇葩的问题:UnicodeEncodeError: 'latin-1' codec can't encode character
每一位成功的程序员,背后也许都站着无数的秃头的男人--为其提供各种开发工具&代码库,当然也包括-- 各种玄学bug-- 玄学的开端 最近在用Python做一个爬虫项目的时候遇到一个很奇怪的问题 ...