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 这样计算最后产生的路径肯定是最大 ...
随机推荐
- 关于Java中2.0-1.1!=0.9的问题
关于Java中2.0-1.1!=0.9的问题 问题引出: 在<Java核心技术>中关于浮点数值计算部分提到,System.out.println(2.0-1.1)这条语句并不是想当然的0. ...
- 2019-9-16:渗透测试,基础学习,Linux下软件安装,环境搭建,笔记
Centos linux下软件安装yum 通过分析rpm包头数据后,自动解决依赖关系,直接云端下载软件,根据不同版本系统获取不同软件信息,按顺序下载rpm包,安装软件yum search 软件名:搜索 ...
- nginx 负载均衡简单配置
配置要求: 三台服务器 127.0.0.1 主负载(把访问请求分给主机池) 127.0.0.2 主机2 127.0.0.3 主机3 第一步: 配置127.0.0.1 ...
- logistic回归介绍以及原理分析
1.什么是logistic回归? logistic回归虽然说是回归,但确是为了解决分类问题,是二分类任务的首选方法,简单来说,输出结果不是0就是1 举个简单的例子: 癌症检测:这种算法输入病理图片并且 ...
- 利用scatter()绘制颜色映射的二次方曲线
程序如下: import matplotlib.pyplot as plt x_value = list(range(1, 1001)) y_value = [x**2 for x in x_valu ...
- linux搭建Git
安装依赖库和编译工具为了后续安装能正常进行,我们先来安装一些相关依赖库和编译工具yum install curl-devel expat-devel gettext-devel openssl-dev ...
- Netty学习——protoc的新手使用流程
Netty学习——protoc的新手使用流程 关于学习的内容笔记,记下来的东西等于又过了一次脑子,记录的更深刻一些. 1. 使用IDEA创建.proto文件,软件会提示你安装相应的语法插件 安装成功之 ...
- 用.NET解索尼相机ARW格式照片
用.NET解索尼相机ARW格式照片 目前常用的照片格式是.jpg,它只能提供8bit的色彩深度,而目前主流的相机都能提供高达12bit-14bit的色彩深度,动态范围和后期处理能力也大大增加,这也是为 ...
- MySQL+Keepalived高可用配置
注意:首先关闭两台机器的防火墙 setenforce 0 Environment: 2台CentOS测试机器 安装好MySQL 1.两台机器安装keepalived yum -y install k ...
- 王晶:华为云OCR文字识别服务技术实践、底层框架及应用场景 | AI ProCon 2019
演讲嘉宾 | 王晶(华为云人工智能高级算法工程师王晶) 出品 | AI科技大本营(ID:rgznai100) 近期,由 CSDN 主办的 2019 中国AI 开发者大会(AI ProCon 2019) ...