Day37 贪心算法part04

LC860柠檬水找零(未掌握)

  1. 未掌握分析:20的时候找零卡住,同时贪心思路就想了很久
    • 当bill[i]=20的时候,我们有两种找零范式,找零10、5和找零三个5,优先找零10、5,因为三个5是可以替代10、5的情况的,我们需要留着三个5防备其他情况。
  2. 代码

LC406根据身高重建队列(未掌握)

  1. 两个维度的题目,与LC135分糖果一样,一定要先确定一个维度,再确定另一个维度。如果两个维度一起考虑一定会顾此失彼。
  2. 如果是先按照K从小到大排序,可以发现K维度和h维度哪个都没有确定下来,与思想违背,因为先确定h再确定k
  3. h从大到小排(h相同的话则k小的站前面),让高个子在前面
  4. 只需要按照k为下标重新插入队列,因为身高是按照高到低排序的,因此可以保证下标k之前一定有个k(0-k-1)个人身高大于或者等于k处的身高
  5. ==使用lambda函数完成数组的排序,需要熟悉这种写法(a,b)->{if(a[0]b[0]) return a[1]-b[1];else return b[0]-a[0];}
  6. 向list的指定位置插入元素的方法:add(index,value)
  7. list转换为数组list.toArray(new int[nums.length]);
  8. 代码

LC452用最少数量的箭引爆气球(未掌握)

  1. 最初的思考是把数组看作是一段范围,只要范围重合了一个箭就可以解决,但是思路是有问题的,因为三个数组不一定全部都有重叠部分,可能是两两重叠两两重叠(此时需要两个箭,但是只计数了1),原本的想法只统计了孤立的范围的个数,但是却并不是结果数
  2. 算法的思路:当气球出现重叠,一起射,所用弓箭最少
    • 为了让气球尽可能的重叠,需要对数组进行排序
    • 如果气球重叠了,重叠气球中右边边界的最小值之前的区间一定需要一个弓箭
    • 代码思路即每次都取重叠范围的最小右边界,如果不重叠就result++
  3. 代码
    数组排序出错?待解释

    \[-2147483646,-2147483645\],\[2147483646,2147483647\]\]-》\[\[2147483646,2147483647\],\[-2147483646,-2147483645\]


相关推荐
洛水水15 小时前
【力扣100题】63.最小覆盖子串
算法·leetcode
AllData公司负责人15 小时前
亲测丝滑,体验跃迁|AllData通过集成开源项目RustFS,多模态数据存储新范式
java·大数据·数据库·算法·数据分析·rustfs
磊 子15 小时前
AVL树的讲解
数据结构·算法
Trouvaille ~15 小时前
【Redis篇】Hash 哈希:字段级操作与对象存储的最佳实践
数据库·redis·后端·算法·缓存·哈希算法·键值对
悠仁さん15 小时前
数据结构 树 二叉树 堆 (链式二叉树模拟实现篇)
数据结构·算法
z2005093015 小时前
今日算法(带回文问题的回溯)
算法·leetcode·回溯
洛水水15 小时前
【力扣100题】55.编辑距离
算法·leetcode·动态规划
洛水水16 小时前
【力扣100题】62.滑动窗口最大值
数据结构·算法·leetcode
IronMurphy16 小时前
算法五十一 64. 最小路径和
算法
醒醒该学习了!16 小时前
Prompt提示词——带有深度思考模型的提示方法(理论篇)
人工智能·算法·prompt