持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情🚀🚀
860. 柠檬水找零 - 力扣(LeetCode)
代码
var lemonadeChange = function(bills) {
let fivecount = 0;
let tencount = 0;
for(let i = 0; i < bills.length;i++){
if(bills[i] == 5){
fivecount++;
}
else if(bills[i] == 10){
fivecount--;
tencount++;
if(fivecount < 0){
return false
}
}
else if(bills[i] == 20){
if(fivecount > 0 && tencount > 0){
fivecount--;
tencount--;
}
else{
fivecount = fivecount - 3;
}
if(fivecount < 0 || tencount < 0)
return false
}
}
return true
};
思路
这道题还是挺好玩的
只需要维护三种金额的数量,5,10和20。
有如下三种情况:
情况一
:账单是5,直接收下。情况二
:账单是10,消耗一个5,增加一个10情况三
:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5
为什么对于情况三这里说优先消耗一个10和一个5呢?
其实还是和之前第一个贪心的题一样,因为10的用途只能去给20找零,而5的用途还可以给10找零,5更万能
,10更矫情
,所以当然是要先把矫情的安排好了~
注意:每种情况都是有前提条件的,如果不满足前提条件就直接false
452. 用最少数量的箭引爆气球 - 力扣(LeetCode)
代码
var findMinArrowShots = function(points) {
points.sort((a, b) => {
return a[0] - b[0]
})
let result = 1
for(let i = 1; i < points.length; i++) {
if(points[i][0] > points[i - 1][1]) {
result++
} else {
points[i][1] = Math.min(points[i - 1][1], points[i][1])
}
}
return result
};
思路
这里要在脑海中构造这样一个图
然后每次比较前一个球的右边和下一个球的左边,如果左边大于右边,则让箭+1;否则就缩小后者的右边界。
注意对二维数组的排序写法
points.sort((a, b) => {
return a[0] - b[0]
})