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刷题总结-链表 一.链表 链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...
随机推荐
- # 0x56 动态规划-状态压缩DP
0x56 动态规划-状态压缩DP Mondriaan's Dream Description Squares and rectangles fascinated the famous Dutch pa ...
- HDU-3032--Nim or not Nim?(博弈+SG打表)
题目分析: 这是一个经典的Multi-SG游戏的问题. 相较于普通的Nim游戏,该游戏仅仅是多了拆成两堆这样的一个状态.即多了一个SG(x+y)的过程. 而根据SG定理,SG(x+y)这个游戏的结果可 ...
- 打造绿色城市,数字孪生天然气站 3D 可视化
前言 天然气作为常见的燃料,与我们的生活息息相关,而对于这种燃料的存储与传输,对于天然气供应站有着严格的要求.燃气企业一般都会将点供站设计为无人值守站,而往往在运营管理过程中,对点供站的安全管理尤为重 ...
- vue学习笔记 十二、通过计算属性获取定义的状态数据
系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...
- Spring的@Async使用防坑
很多人会直接只用@Async来执行异步操作.但是这里面有一个问题,如果都是用spring的默认实现,是有坑的. 当我们开启 EnableAsync 只有就使用Async来执行异步操作了. 走JDK的动 ...
- 【调试】kdump原理及其使用方法
kdump机制 简介 Kdump是在系统崩溃.死锁或死机时用来转储内存运行参数的一个工具和服务,是一种新的crash dump捕获机制,用来捕获kernel crash(内核崩溃)的时候产生的cras ...
- Element-ui 之 form表单套数组、表单数组套数组的校验rules
https://blog.csdn.net/qq_61553794/article/details/135451461
- 8. exporter
一.已经实现的收集器 1.1 可收集的内存指标 1.2 可收集的jetty指标 二.自定义收集 2.1 summer 2.2 histogram 三.架构设计 exporter作为Prometheus ...
- 【滤波】Kalman Filter
from: 卡尔曼滤波教程 (kalmanfilter.net) 总览 关于本教程 关于作者 关于卡尔曼滤波 为什么需要预测算法 卡尔曼滤波简介 必要的背景知识 均值和期望 方差和标准差 正态分布 随 ...
- [转帖]一文深度讲解JVM 内存分析工具 MAT及实践(建议收藏)
https://juejin.cn/post/6911624328472133646 1. 前言 熟练掌握 MAT 是 Java 高手的必备能力,但实践时大家往往需面对众多功能,眼花缭乱不知如何下手, ...