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\]


相关推荐
2301_82236635几秒前
C++中的智能指针详解
开发语言·c++·算法
u01092727126 分钟前
C++中的模板方法模式
开发语言·c++·算法
重生之我是Java开发战士33 分钟前
【优选算法】滑动窗口:长度最小的子数组,无重复字符的最长子串,最大连续1的个数,将x减到0的最小操作数,水果成篮,异位词,串联所有单词的子串,最小覆盖子串
算法
naruto_lnq1 小时前
C++与自动驾驶系统
开发语言·c++·算法
啊阿狸不会拉杆1 小时前
《数字信号处理》第6章:数字滤波器的基本概念及几种特殊滤波器
算法·matlab·信号处理·数字信号处理·dsp
放荡不羁的野指针1 小时前
leetcode150题-双指针
数据结构·算法·leetcode
好学且牛逼的马1 小时前
【Hot100|15-LeetCode 238. 除自身以外数组的乘积】
数据结构·算法·leetcode
Tisfy1 小时前
LeetCode 3651.带传送的最小路径成本:动态规划
算法·leetcode·动态规划·题解·排序
努力学习的小廉2 小时前
我爱学算法之—— 递归回溯综合(一)
算法·深度优先
m0_736919102 小时前
C++中的策略模式实战
开发语言·c++·算法