860.柠檬水找零
/*** @param {number[]} bills* @return {boolean}*/
var lemonadeChange = function(bills) {let d5=0let d10=0let d20=0for(let i=0;i<bills.length;i++){if(bills[i]===5){d5+=1}else if(bills[i]===10){if(d5>=1){d5--d10++}elsereturn false}else{if(d5>=1&&d10>=1){d5--d10--}else if(d5>=3){d5-=3}else return false}}return true
};
406.根据身高重建队列
/*** @param {number[][]} people* @return {number[][]}*/
var reconstructQueue = function(people) {// people.sort((x,y)=>y[0]-x[0])people.sort((a, b ) => {if(b[0] !== a[0]) {return b[0] - a[0]} else {return a[1] - b[1]}})let ok=[]for(let i=0;i<people.length;i++){ok.splice(people[i][1],0,people[i]) //纯增加情况}return ok
};
想法
困难
people.sort((a, b ) => {if(b[0] !== a[0]) {return b[0] - a[0]} else {return a[1] - b[1]}
})
先按升高从大到小排,如果身高一样,就按人数从小到大排队
452. 用最少数量的箭引爆气球
/*** @param {number[][]} points* @return {number}*/
var findMinArrowShots = function(points) {points.sort((x,y)=>(x[0]-y[0]))//按开始节点排序let r=0for(let i=0;i<points.length-1;i++){//有重叠,(两个气球化为一个气球),更新最右边框if(points[i][1]>=points[i+1][0]){points[i+1][1]=points[i+1][1]>points[i][1]?points[i][1]:points[i+1][1]}//没有重叠,说明可以射出箭了elser++}return r+1
};
想法
局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。