134. 加油站
题目链接:力扣题目链接
思路:(“代码随想录”)那么局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置。
135. 分发糖果
题目链接:力扣题目链接
思路:一次是从左到右遍历,只比较右边孩子评分比左边大的情况。一次是从右到左遍历,只比较左边孩子评分比右边大的情况。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。
860.柠檬水找零
题目链接:力扣题目链接
思路:用HashMap存储每一个类型纸币数量一旦某个小于0就return false;5\10\20三种情况分别if判断即可,在没有10的时候可以找零3个5。但是其实两个变量存储分别存储5和10即可,HashMap没有必要。
import java.util.HashMap;class Solution {public boolean lemonadeChange(int[] bills) {// 初始化各类钞票的数量HashMap<Integer, Integer> map = new HashMap<>();map.put(5, 0);map.put(10, 0);map.put(20, 0);for(int bill : bills){if(bill == 5){map.put(5, map.get(5) + 1);}else if(bill == 10){if(map.get(5) < 1){return false; // 无法找零}map.put(10, map.get(10) + 1);map.put(5, map.get(5) - 1);}else if(bill == 20){// 优先使用一张 10 和一张 5if(map.get(10) >= 1 && map.get(5) >= 1){map.put(20, map.get(20) + 1);map.put(10, map.get(10) - 1);map.put(5, map.get(5) - 1);}// 如果没有 10 美元,再尝试使用三张 5 美元else if(map.get(5) >= 3){map.put(20, map.get(20) + 1);map.put(5, map.get(5) - 3);}else{return false; // 无法找零}}else{// 处理非法的钞票面值return false;}}return true;}
}
406.根据身高重建队列
题目链接:力扣题目链接
思路:先按身高降序排列,同样身高按照ki升序排列,优先按身高高的people的k来插入。插入操作过后的people满足队列属性。
时间:2h