Leetcode题解 - 贪心算法部分简单题目代码+思路(860、944、1005、1029、1046、1217、1221)
leetcode真的是一个学习阅读理解的好地方
860. 柠檬水找零

"""
因为用户支付的只会有5、10、20
对于10元的用户必须找一个5
对于20元的用户可以找(三个5)或者(一个10一个5),每次都从大的开始找起来
"""
class Solution:
def lemonadeChange(self, bills) -> bool:
five = 0
ten = 0
for i in bills:
if i == 5:
five += 1
if i == 10:
if five == 0:
return False
five -= 1
ten += 1
if i == 20:
if ten == 0:
if five < 3:
return False
five -= 3
else:
if not five:
return False
ten -= 1
five -= 1
return True
944. 删列造序

class Solution:
def minDeletionSize(self, A) -> int:
if len(A[0]) == 1 or not A[0]:
return 0
sequence = 0
minus = 0
while sequence < len(A[0]):
preTmp = 0
i = 1
# 判断该列是否应该被删除,即后一个是否大于等于前一个
while i != len(A):
if A[i][sequence] < A[preTmp][sequence]:
minus += 1
break
preTmp = i
i += 1
sequence += 1
return minus
1005. K 次取反后最大化的数组和

"""
因为可以对同一个进行多次处理,所以先把负的都变成正数,然后就一直对最小的进行取反操作
"""
class Solution:
def largestSumAfterKNegations(self, A, K: int) -> int:
A = sorted(A)
tmp = K
# 将负数先变成正数
for i in range(K):
if A[i] < 0:
A[i] = -A[i]
else:
tmp = i
break
A = sorted(A)
# 一直处理最小值
while tmp < K:
A[0] = -A[0]
tmp += 1
return sum(A)
1029. 两地调度

"""
先将所有人全部安排飞往B市,再选择N个人改变它们的行程,让它们飞往A市,那么每改变一个人就会额外付出priceA-priceB的费用,
谁的priceA-priceB最小(因为priceA-priceB是可正可负的),我们就让谁去。
"""
class Solution:
def twoCitySchedCost(self, costs) -> int:
costs = sorted(costs, key=lambda x:x[0] - x[1])
s = 0
n = len(costs)//2
for i in range(n):
s += costs[i][0] + costs[i + n][1]
return s
1046. 最后一块石头的重量

"""
每次都找最大的两块出来,然后进行粉碎操作,开始下一次操作前仍然需要重新排序
"""
class Solution:
def lastStoneWeight(self, stones) -> int:
if len(stones) == 1:
return stones[0]
while stones:
if len(stones) == 1:
return stones[0]
stones = sorted(stones, reverse=True)
a = stones.pop(0)
b = stones.pop(0)
if a != b:
stones.append(abs(a - b))
return 0
1217. 玩筹码

"""
已知单数筹码移至单数筹码所在位置,或双数筹码移至双数筹码所在位置上时, 将不用付出代价。
但如果是单数筹码移至双数筹码的位置上,或双->单, 将需要付出 1 的代价,成堆的筹码移动时,也需要付出对应筹码个数的代价。
那就先把奇数位置的全部移动到A,偶数位置的全部移动到B,然后比较A和B那个点的筹码多,再把筹码少的移动过去。
奇数移动到偶数(偶数移动到奇数)的代价为少的一个的数量
"""
class Solution:
def minCostToMoveChips(self, chips) -> int:
odd = 0
even = 0
for i in range(chips):
if chips[i] % 2 == 0:
even += 1
continue
odd += 1
return min(even, odd)
1221. 分割平衡字符串

"""
直观思路,为遇到的每一个R(L)找到配对的。
"""
class Solution:
def balancedStringSplit(self, s: str) -> int:
vis = set()
res = 0
for i in range(len(s)):
if i in vis:
continue
sign = 0
vis.add(i)
for j in range(i+1, len(s)):
# 如果遇到了同类,那么等下即使遇到了配对的,也不能立即配对
if s[j] == s[i]:
sign += 1
vis.add(j)
else:
sign -= 1
vis.add(j)
if sign == -1:
res += 1
break
return res
Leetcode题解 - 贪心算法部分简单题目代码+思路(860、944、1005、1029、1046、1217、1221)的更多相关文章
- Leetcode题解 - 树、DFS部分简单题目代码+思路(700、671、653、965、547、473、46)
700. 二叉搜索树中的搜索 - 树 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 思路: 二 ...
- Leetcode题解 - DFS部分简单题目代码+思路(113、114、116、117、1020、494、576、688)
这次接触到记忆化DFS,不过还需要多加练习 113. 路径总和 II - (根到叶子结点相关信息记录) """ 思路: 本题 = 根到叶子结点的路径记录 + 根到叶子结点 ...
- Leetcode题解 - 树部分简单题目代码+思路(105、106、109、112、897、257、872、226、235、129)
树的题目中递归用的比较多(但是递归是真难弄 我
- Leetcode题解 - 链表简单部分题目代码+思路(21、83、203、206、24、19、876)
- Leetcode题解 - BFS部分题目代码+思路(896、690、111、559、993、102、103、127、433)
和树有关的题目求深度 -> 可以利用层序遍历 -> 用到层序遍历就想到使用BFS 896. 单调数列 - 水题 class Solution: def isMonotonic(self, ...
- Leetcode题解 - DFS部分题目代码+思路(756、1034、1110、491、721、988)
756. 金字塔转换矩阵 """ 学到的新知识: from collections import defaultditc可以帮我们初始化字典,不至于取到某个不存在的值的时 ...
- LeetCode解题记录(贪心算法)(二)
1. 前言 由于后面还有很多题型要写,贪心算法目前可能就到此为止了,上一篇博客的地址为 LeetCode解题记录(贪心算法)(一) 下面正式开始我们的刷题之旅 2. 贪心 763. 划分字母区间(中等 ...
- python常用算法(6)——贪心算法,欧几里得算法
1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...
- poj 1088 滑雪(贪心算法)
思想: (贪心算法 ,看到题目是中文才做的) 先对数组中的数据进行排序,从最小的数据计算 当前的顶点的可以滑行的最大值=max(周围可达的顶点的可以滑行的最大值)+1 这样计算最后产生的路径肯定是最大 ...
随机推荐
- Markdown学习笔记(一)
解决Markdown文件插入图片无法只能本地查看的问题 原因:图片的显示与图片地址关联,写入Markdown时用的本机地址,一旦上传到网络,地址就发生了变化,也就显示不了图片. 寻找免费的图床网站. ...
- 一文彻底搞懂CAS实现原理 & 深入到CPU指令
本文导读: 前言 如何保障线程安全 CAS原理剖析 CPU如何保证原子操作 解密CAS底层指令 小结 朋友,文章优先发布公众号,如果你愿意,可否扫文末二维码关注下? 前言 日常编码过程中,基本不会直接 ...
- 01 JavaScript变量的声明、变量的使用、变量的命名规范和规则
变量的声明,关键字:var //声明一个变量 var name; //给变量赋值 name = '哈士奇'; //声明并赋值一个变量 var name = '哈士奇'; 变量的使用 //声明并赋值一个 ...
- @PathVariable 处理参数为空的情况
@RequestMapping(value = "/get/{id}/{userId}", method = RequestMethod.GET) public Result ge ...
- 2019-2020-2 20199317《Linux内核原理与分析》第二周作业
第一章 计算机工作原理 1 存储程序计算机工作模型 存储程序计算机的主要思想是将程序存放在计算机存储器中,然后按存储器中的存储程序的首地址执行程序的第一条指令,以后就按照该程序中编写 ...
- mysql那些事(4)建库建表编码的选择
mysql建数据库或者建表的时候会遇到选择编码的问题,以前我们都是习惯性的选择utf8,但是在mysql在5.5.3版本后加了utf8mb4的编码,utf8mb4可以存4个字节Unicode,mb4就 ...
- DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】
[摘要] 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...
- Xcode 清理存储空间(转)
一 移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) 只要重新运行Xcode就一定会重新生成,而且会随着运行程序的增多,占用空间会越来越大.删除后在重新运行程序可能会稍微慢 ...
- Spring Boot 整合Spring Data以及rabbitmq,thymeleaf,向qq邮箱发送信息
首先得将自己的qq开启qq邮箱的POP3/SMTP服务 说明: p,e为路由key. 用户系统完成登录的时候,将{手机号-时间-IP}保存到队列Phone-queue中,msg-sys系统获得消息打印 ...
- linux运维中经常使用的目录和文件讲解
第9章 linux中目录结构 9.1 linux中的常见目录和解释说明 ID 目录 说明 1 bin 命令文件保存的地方 2 sbin 只有root用户才可以使用的命令 3 Boot(了解即可) Li ...