Leetcode 860.柠檬水找零
题目:860.柠檬水找零
初始思路
思路很简单,5不用找零,10用5找零,20用10+5或者三个5找零
代码
var lemonadeChange = function (bills) {let five = 0let ten = 0for (let bill of bills) {if (bill === 5) {// 如果支付5的话,正好five++} else if (bill === 10) {// 如果支付10的话,先用5找零,没有5就直接失败if (five > 0) {five--ten++} else {return false}} else {// 如果支付20的话,优先使用10+5,或者三个5if (ten > 0 && five > 0) {ten--five--} else if (five >= 3) {five -= 3} else {return false}}}return true};
感想
- 思路不难,可以简单写出来。
Leetcode 406.根据身高重建队列
题目:406.根据身高重建队列
初始思路
代码
var reconstructQueue = function (people) {let queue = []people.sort((a, b) => {if (b[0] !== a[0]) {// 如果身高不等的话,身高大的在前面return b[0] - a[0]} else {// 如果身高相等的话,编号小的在前面return a[1] - b[1]}})for (let i = 0; i < people.length; i++){// 插入位置// 第一个参数:规定从何处添加元素(下标),是数字// 第二个参数:规定要添加多少元素,是数字// 第三个数字:添加到数组的新元素queue.splice(people[i][1], 0, people[i])}return queue};
感想
- 首先按照身高排序,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。
- 按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。

Leetcode 452.用最少数量的箭引爆气球
初始思路
代码
var findMinArrowShots = function (points) {// 按照起始坐标从小到大排序points.sort((a, b) => {return a[0] - b[0]})// points不为空至少需要一根箭let res = 1for (let i = 1; i < points.length; i++){if (points[i][0] > points[i - 1][1]) {// 如果下一个气球的起始位置够不到前一个气球的末尾,也就是不重合// 需要一支箭res++} else {// 更新重叠气球最小右边界,覆盖该位置的值,留到下一步使用points[i][1] = Math.min(points[i - 1][1], points[i][1])}}return res};
感想
- 如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭。

- 注意题目中说的是:满足 xstart ≤ x ≤ xend,则该气球会被引爆。那么说明两个气球挨在一起不重叠也可以一起射爆
