655:非递减数列

链接:665. 非递减数列 - 力扣(LeetCode)

直接找最大最小值进行替换不行,[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:摆动序列

链接:376. 摆动序列 - 力扣(LeetCode)

数组长度为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:最大子数组和

链接:53. 最大子数组和 - 力扣(LeetCode)

数组从头开始加,和大于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:跳跃

链接:55. 跳跃游戏 - 力扣(LeetCode)

跳一次,能跳的最大范围是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

链接:45. 跳跃游戏 II - 力扣(LeetCode)

数组长度为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:加油站

链接:134. 加油站 - 力扣(LeetCode)

嘶~些微有点头疼,先确认从当前加油站走后剩余油,找剩余量大于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:找零

链接:860. 柠檬水找零 - 力扣(LeetCode)

(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:合并区间

链接:56. 合并区间 - 力扣(LeetCode)

区间左端从大到小,下一个区间尾大于等于当前区间头,合并

 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刷题第二天-贪心的更多相关文章

  1. leetcode刷题第二天<两数相加>

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  2. LeetCode刷题第二天

    2.给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们 ...

  3. C#LeetCode刷题-贪心算法

    贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配   17.8% 困难 45 跳跃游戏 II   25.5% 困难 55 跳跃游戏   30.6% 中等 122 买卖股票的最佳时机 II C ...

  4. leetcode刷题记录--js

    leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

  5. LeetCode刷题总结之双指针法

    Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...

  6. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

  7. LeetCode刷题总结-数组篇(下)

    本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...

  8. LeetCode刷题总结-树篇(中)

    本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...

  9. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  10. LeetCode刷题总结-链表

    LeetCode刷题总结-链表 一.链表     链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...

随机推荐

  1. BZOJ 3450 - Tyvj1952 Easy (期望DP)

    描述 某一天 WJMZBMR 在打 osu~~~ 但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则: 有 \(n(n\le 300000)\) 次点击要做,成功了就是 o,失败了就 ...

  2. python常见面试题讲解(三)明明的随机数

    题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对 ...

  3. python pip手动安装二进制包

    python中使用pip安装扩展包的时候,有时候会遇到如下类似报错: Running setup.py install for mysqlclient ... error ...(中间报错信息省略) ...

  4. 2023 SHCTF-校外赛道 PWN WP

    WEEK1 nc 连接靶机直接梭 hard nc 同样是nc直接连,但是出题人利用linux命令的特性,将部分flag放在了特殊文件中 利用ls -a查看所有文件,查看.gift,可以得到前半段 然后 ...

  5. JMS微服务架构 - 关于事务提交失败,自动重新提交的机制

    用JMS编写的微服务,由调用端决定了各个微服务执行时,是否需要保持事务的一致性. 也就是RemoteClient在调用微服务方法前,先调用BeginTransaction明确后面所调用的微服务需要保持 ...

  6. [转帖]如何用 30s 给面试官讲清楚什么是 Session-Cookie 认证

    https://www.jianshu.com/p/e1121d4d7084 引言 由于 HTTP 协议是无状态的,完成操作关闭浏览器后,客户端和服务端的连接就断开了,所以我们必须要有一种机制来保证客 ...

  7. [转帖]Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)

    https://www.cnblogs.com/monjeo/p/12191673.html 权限简介Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方 ...

  8. 【转帖】python 安装whl文件

    前言 WHL文件是以Wheel格式保存的Python安装包,Wheel是Python发行版的标准内置包格式.在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的p ...

  9. [转帖]HTTP 框架 Hertz 实践入门:性能测试指南

    https://maimai.cn/article/detail?fid=1767401397&efid=R2_kM5y-yEUDCK88FZWrGA 干货不迷路2021 年 9 月 8 日, ...

  10. [转帖]并发控制- sched_yield 函数

    函数说明 函数原型 #include <sched.h> int sched_yield(void); 1 2 sched_yield的作用是让出处理器,调用时会导致当前线程放弃CPU,进 ...