Leetcode刷题第二天-贪心
655:非递减数列
直接找最大最小值进行替换不行,[1,5,4,6,7,8,9]最大最小值所处位置可能是非递减数列
如果nums[i]>nums[i+1],当前这俩个数递减,修改谁,记录前一个数,比较前一个数和当前数的大小,前一个数大,小变大,后一个数大,大变小
统计次数,出现两次,结束

1 class Solution:
2 def checkPossibility(self, nums: List[int]) -> bool:
3 if(not nums): return True
4 count,laster=0,-1
5 for i in range(len(nums)-1):
6 if(i!=0): laster=nums[i-1]
7 if(nums[i]>nums[i+1]):
8 count+=1
9 if(nums[i+1]<laster):
10 nums[i+1]=nums[i]
11 else:
12 nums[i]=nums[i+1]
13 if(count==2): return False
14 return True
checkPossibility
376:摆动序列
数组长度为2,直接输出,数不一样,返回2,数一样返回1
长度超过3,遍历数组,找到连续递增或连续递减的首尾。默认前两个数之差为0,开始遍历,当前数和下一个数的差,与前两个数之差不同,结果+1,

1 class Solution:
2 def wiggleMaxLength(self, nums: List[int]) -> int:
3 if(len(nums)<=1): return len(nums)
4 if(len(nums)==2):
5 if(nums[0]!=nums[1]): return len(nums)
6 else: return 1
7 re=1
8 laster=0
9 for i in range(len(nums)-1):
10 nextre=nums[i+1]-nums[i]
11 if( (laster>=0 and nextre<0) ):
12 re+=1
13 laster=nextre
14 if( (laster<=0 and nextre>0) ):
15 re+=1
16 laster=nextre
17 return re
wiggleMaxLength
53:最大子数组和
数组从头开始加,和大于0,记录到最大数组和,继续加,和小于0,和从0重新开始计算,如果最后和为0,存在数组全为负数或者一正一负相加为0,返回数组最大值

1 class Solution:
2 def maxSubArray(self, nums: List[int]) -> int:
3 if(not nums): return 0
4 if(len(nums)==1): return nums[0]
5 re,sums=0,0
6 for n in nums:
7 sums+=n
8 if(sums>=0):
9 re=max(re,sums)
10 else: sums=0
11 if(re==0): re=max(nums)
12 return re
maxSubArray
55:跳跃
跳一次,能跳的最大范围是i+num[i],在这中间的所有格子都可以跳,在能跳的最大范围内,每跳一格,更新最大范围,最大范围大于数组长度,可以,跳到最大范围边上,还没到数组长度,不可以

1 class Solution:
2 def canJump(self, nums: List[int]) -> bool:
3 if(len(nums)<=1): return True
4 i,cover=0,0
5 while i<=cover:
6 cover=max(cover,i+nums[i])
7 if(cover>=len(nums)-1): return True
8 i+=1
9 return False
canJump
45:跳跃2
数组长度为0,1,不用跳,和55不同的是,需要在第一次最大范围内找到跳的最远的位置

1 import sys
2 class Solution:
3 def jump(self, nums: List[int]) -> int:
4 if(len(nums)<=1): return 0
5 i,cover,re=0,0,0
6 while i<len(nums):
7 step=i+nums[i]
8 re+=1
9 if(step>=len(nums)-1): break
10 for j in range(i,step+1):
11 if(j==len(nums)): break
12 if(j+nums[j]>step):
13 step=j+nums[j]
14 i=j
15 cover=1
16 if(not cover):
17 re=0
18 break
19 return re
jump
1005:k次取反后求最大和
链接:1005. K 次取反后最大化的数组和 - 力扣(LeetCode)
每次都找最小值取反

1 class Solution:
2 def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
3 if(not nums): return 0
4 while k:
5 min_n=min(nums)
6 min_id=nums.index(min_n)
7 nums[min_id]=-min_n
8 k-=1
9 return sum(nums)
largestSumAfterKNegations
134:加油站
嘶~些微有点头疼,先确认从当前加油站走后剩余油,找剩余量大于0的,开始,依次加后面加油站剩余油量,如果出现负数,本轮失败,继续找余量大于0,开始,依次加后面加油站剩余油量大于等于0,回到开始位置,ok

1 class Solution:
2 def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
3 if(not gas or not cost): return -1
4 if(sum(cost)>sum(gas)): return -1
5 if(len(gas)==1): return 0
6 uses={}
7 n=len(gas)
8 for i in range(n):
9 uses[i]=gas[i]-cost[i]
10 usess=sorted(uses.items(),key=lambda x:x[1],reverse=True)
11 for index in usess:
12 if(index[1]>0):
13 sums=index[1]
14 i=index[0]
15 while sums>=0:
16 i+=1
17 if(i==n): i=0
18 sums+=uses[i]
19 if(i==index[0]): return i
20
21
22
canCompleteCircuit
860:找零
(lll¬ω¬)出现20优先找10块的。。。

1 class Solution:
2 def lemonadeChange(self, bills: List[int]) -> bool:
3 if(not bills): return True
4 moneys={5:0,10:0,20:0}
5 for bill in bills:
6 moneys[bill]+=1
7 if(bill==10):
8 if(moneys[5]>0): moneys[5]-=1
9 else: return False
10 if(bill==20):
11 if(moneys[10]>0 and moneys[5]>0):
12 moneys[5]-=1
13 moneys[10]-=1
14 elif(moneys[5]>2): moneys[5]-=3
15 else:
16 return False
17 print(moneys)
18 return True
lemonadeChange
56:合并区间
区间左端从大到小,下一个区间尾大于等于当前区间头,合并

1 class Solution:
2 def merge(self, intervals: List[List[int]]) -> List[List[int]]:
3 if(not intervals): return intervals
4 intervals.sort(key=lambda x:x[1],reverse=True)
5 data=[]
6 i=0
7 while i<len(intervals)-1:
8 if(intervals[i+1][1]>=intervals[i][0]):
9 intervals[i][0]=min(intervals[i+1][0],intervals[i][0])
10 intervals.remove(intervals[i+1])
11 else:
12 i+=1
13 return intervals
merge
Leetcode刷题第二天-贪心的更多相关文章
- leetcode刷题第二天<两数相加>
题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- LeetCode刷题第二天
2.给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们 ...
- C#LeetCode刷题-贪心算法
贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配 17.8% 困难 45 跳跃游戏 II 25.5% 困难 55 跳跃游戏 30.6% 中等 122 买卖股票的最佳时机 II C ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- LeetCode刷题总结之双指针法
Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
- LeetCode刷题总结-树篇(中)
本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...
- LeetCode刷题总结-树篇(上)
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
- LeetCode刷题总结-链表
LeetCode刷题总结-链表 一.链表 链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...
随机推荐
- VUE里使用iframe在更改了src之后对应的网页并未刷新解决方案
在vue 里使用iframe,在更新src后页面并未刷新, 在更改iframe src属性值之前加上这一句即可 document.getElementById(iframe的id).contentWi ...
- div模拟表格单元格合并
效果如下图: html代码如下: 1 <ul class="schedule-list"> 2 <li class="schedule-title&qu ...
- [吉他谱]duvet
- zookeeper分布式锁原理及使用 curator 实现分布式锁
本文为博主原创,未经允许不得转载: 1. zookeeper 分布式锁应用场景及特点分析 2. zookeeper 分布式原理 3. curator 实现分布式锁 1. zookeeper 分布式锁: ...
- idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
本文为博主原创,未经允许不得转载: mybatis plus 使用过程中已经很大程度提升了我们开发的效率,因为它内部已经对单表的操作进行了完美的封装,但是关联表操作时, 这时就需要自己定义sql,自定 ...
- spring启动流程 (6完结) springmvc启动流程
SpringMVC的启动入口在SpringServletContainerInitializer类,它是ServletContainerInitializer实现类(Servlet3.0新特性).在实 ...
- AHB 局限性
AHB's problem SoC bus 架构 AXI is used more and more 频率200M使用AHB,频率再升高就使用AXI AHB的问题 AHB协议本身限制要求较高,比如co ...
- 【C】《C专家编程》阅读体会
[来源]https://mp.weixin.qq.com/s/0kmN5knql4yrOuUcnebwIQ
- PageHelper 分页不起作用
将 reasonable 设置为 false .
- 为什么 sort() 中的 return a-b 可以决定升序
arr.sort( function(a,b){ return a-b; } ) 千万不要理解成 a 减 b 其实它代表的是26个字母中的 a 和 b b 比 a 大,所以 a - b 就是升序,写成 ...