学习目标:
● 860.柠檬水找零
● 406.根据身高重建队列
● 452. 用最少数量的箭引爆气球
学习内容:● 860.柠檬水找零
https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html
注意这个是按顺序遍历,就可以,5,10,15三个数字
有如下三种情况:
情况一:账单是5,直接收下。
情况二:账单是10,消耗一个5,增加一个10
情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5
five-=3//five-3报错
var lemonadeChange = function(bills) {
let five = 0;
let ten = 0;
let twenty = 0;
for(let i=0;i<bills.length;i++){
if(bills[i]==5){
five++
}
if(bills[i]==10){
if(five>=1){
ten++;
five--
}else{
return false
}
}
if(bills[i]==20){
if(ten>=1&&five>=1){
twenty++;
ten--
five--
}else if(five>=3){
five-=3
}else{
return false
}
}
}
return true
};
学习内容:● 406.根据身高重建队列
https://programmercarl.com/0406.%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97.html
//二维数组的排序
people.sort((a,b)=>{
if(a[0]!==b[0]){
return b[0]-a[0]
}else{
return a[1]-b[1]
}
})
//splice向数组指定位置插入元素。三个参数,第一个参数(位置),第二个参数(0),第三个参数(插入的项)
queue.splice(people[i][1],0,people[i])
var reconstructQueue = function(people) {
let queue = []
people.sort((a,b)=>{
if(a[0]!==b[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
};
学习内容:● 452. 用最少数量的箭引爆气球
https://programmercarl.com/0452.%E7%94%A8%E6%9C%80%E5%B0%91%E6%95%B0%E9%87%8F%E7%9A%84%E7%AE%AD%E5%BC%95%E7%88%86%E6%B0%94%E7%90%83.html
为了让气球尽可能的重叠,需要对数组进行排序。
如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭。
算法题,永远读不懂题
var findMinArrowShots = function(points) {
if(points.length==0)return 0
let result=1
points.sort((a,b)=>{
return a[0] - b[0]
})
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
};