Day36 贪心算法Part03

LC1005 K次取反后最大化的数组和(未掌握)

  1. 未掌握分析:贪心思维不够
  2. 贪心思路:
    • 局部最优:让绝对值大的负数变为正数,当前数值达到最大,
    • 整体最优:整个数组和达到最大。
    • 如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让 数组和 达到最大。
      • 局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大,全局最优:整个 数组和 达到最大。
  3. 代码.

LC134加油站(未掌握)

  1. 暴力方法:遍历每一个加油站为起点的情况,模拟一圈
    • 因为涉及循环一圈,因此比较麻烦,for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历,要灵活使用while
    • 时间复杂度O(N^2)
  2. 代码
  3. 贪心思路
    • 如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的
    • 每个加油站的剩余量rest[i]为gas[i] - cost[i]
    • i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。
  4. 代码
    • totalSum是用来根据总油量减去总消耗是否大于等于零做出判断的

LC135分发糖果(未掌握)

  1. 思路:
    • 确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,如果两边一起考虑一定会顾此失彼。
    • 先确定右边评分大于左边的情况(也就是从前向后遍历)
      • 局部最优:只要右边评分比左边大,右边的孩子就多一个糖果,全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果
      • 如果ratings[i] > ratings[i - 1] 那么candyVec[i] = candyVec[i - 1] + 1
    • 再确定左孩子大于右孩子的情况(从后向前遍历)
      • 为什么不从前向后遍历,因为rating[i+1]与rating[i]的比较 要利用上 rating[i+1]与rating[i+2]的比较结果,所以要从后向前遍历
      • 如果 ratings[i] > ratings[i + 1],此时candyVec[i](第i个小孩的糖果数量)就有两个选择了,一个是candyVec[i + 1] + 1(从右边这个加1得到的糖果数量),一个是candyVec[i](之前比较右孩子大于左孩子得到的糖果数量),取最大值
  2. 代码
相关推荐
Xの哲學2 分钟前
Linux设备驱动模型深度解剖: 从设计哲学到实战演练
linux·服务器·网络·算法·边缘计算
明洞日记17 分钟前
【CUDA手册002】CUDA 基础执行模型:写出第一个正确的 Kernel
c++·图像处理·算法·ai·图形渲染·gpu·cuda
企业对冲系统官1 小时前
基差风险管理系统集成说明与接口规范
大数据·运维·python·算法·区块链·github
程序员-King.1 小时前
day134—快慢指针—环形链表(LeetCode-141)
算法·leetcode·链表·快慢指针
Swift社区1 小时前
LeetCode 376 摆动序列
算法·leetcode·职场和发展
高洁011 小时前
AIGC技术与进展(1)
深度学习·算法·机器学习·transformer·知识图谱
未来之窗软件服务1 小时前
计算机等级考试——二叉树考点和坑——东方仙盟
算法·二叉树·计算机软考·仙盟创梦ide·东方仙盟
张张努力变强1 小时前
C++类和对象(一):inline函数、nullptr、类的定义深度解析
开发语言·前端·jvm·数据结构·c++·算法
且去填词2 小时前
深入理解 GMP 模型:Go 高并发的基石
开发语言·后端·学习·算法·面试·golang·go
Hcoco_me2 小时前
大模型面试题76:强化学习中on-policy和off-policy的区别是什么?
人工智能·深度学习·算法·transformer·vllm