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刷题总结-链表 一.链表 链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...
随机推荐
- AtCoder Beginner Contest 208 A~E个人题解
比赛链接:Here A - Rolling Dice 水题 一个六面的骰子,请问摇动 \(A\) 次最后的点数和能否为 \(B\) 如果 \(B \in [a,6a]\) 输出 YES C++ voi ...
- vivo 大规模特征存储实践
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/u1LrIBtY6wNVE9lzvKXWjA作者:黄伟锋 本文旨在介绍 vivo 内部的特征存储 ...
- java基础数据类型-int类型-浮点型-数据类型的转换--day02
目录 1. 变量的命名 2. 常量 3. 变量 4. 进制 4.1 进制转换 4.2 整型数据类型 5 浮点型 6. 字符串 7. 整形与字符型之间的转换 8 最常见的一个乱码问题 9. 布尔类型 1 ...
- spring注入的几种方式
本文为博主原创,未经允许不得转载: Spring注入有以下几种方式: 构造方法注入:通过构造方法实现依赖注入.在类的构造方法中使用@Autowired注解注入需要的依赖类. Setter方法注入:通过 ...
- 开发了一个json格式化工具,使用js格式化json的代码分享
今天给大家介绍一下如何通过js来格式化json. 假设json字符串是: {"name":"刘德华","age":25.2,"bi ...
- 云计算&虚拟化 技术名词汇总
云计算&虚拟化 技术名词汇总 目录 云计算&虚拟化 技术名词汇总 虚拟化方向 QEMU/qemu VMM virtual machine monitor (虚拟机监管器) Hyperv ...
- Angular系列教程之父子组件通信详解
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- Redis-逻辑库-select
- [转帖]谁动了我的 CPU 频率 —— CPU 性能之迷 Part 2
https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/ 目录: 为何有本文 什么是动态 CPU 频率 什么是 p-state ...
- [转帖]Active Session History (ASH)
Introduction V$ACTIVE_SESSION_HISTORY DBA_HIST_ACTIVE_SESS_HISTORY Enterprise Manager Performance Pa ...