檸檬水找零
力扣題目鏈接
自己的思路:
- 用map存起來5绊诲,10级遭,20的個數(shù)
- 遇到20找零的情況有兩種惨驶。未對兩種情況的優(yōu)先級進(jìn)行分析沮稚。
改進(jìn):
- 直接用變量記錄5吁恍,10 的個數(shù)巩搏,20 不用記錄昨登,因?yàn)椴粫ǖ簟?/li>
- 遇到20找零的情況有兩種。應(yīng)先用掉10贯底,5丰辣,以保留最多的5,用于找零10及20.
//自己寫的
var lemonadeChange = function(bills) {
let map=new Map()
for(let i in bills){
if(bills[i] === 5){
map.set(5,map.get(5)? (map.get(5)+1) : 1)
}else if(bills[i]===10){
if(map.get(5)>=1){
map.set(5,map.get(5)-1)
map.set(10,map.get(10)? (map.get(10)+1) : 1)
}else{
return false
}
}else if(bills[i]===20){
if(map.get(10)>=1 && map.get(5)>=1){
map.set(10,map.get(10)-1)
map.set(5,map.get(5)-1)
map.set(20,map.get(20)? (map.get(20)+1): 1)
}else if(map.get(5)>=3){
map.set(5,map.get(5)-3)
map.set(20,map.get(20)? (map.get(20)+1): 1)
}else{
return false
}
}
}
return true
};
//參考
var lemonadeChange = function(bills) {
let five=0,ten=0
for(let i in bills){
if(bills[i] === 5){
five++
}else if(bills[i]===10){
if(five>=1){
five--
ten++
}else{
return false
}
}else if(bills[i]===20){
if(ten>=1 && five >=1){
ten--
five--
}else if(five>=3){
five -= 3
}else{
return false
}
}
}
return true
};
根據(jù)身高重建隊(duì)列
力扣題目鏈接
思路:
先按照身高排序(身高相同k小的在前面禽捆!注意)笙什,再根據(jù)k 插入身高的排序結(jié)果中。
局部最優(yōu):優(yōu)先按身高高的people的k來插入胚想。插入操作過后的people滿足隊(duì)列屬性
全局最優(yōu):最后都做完插入操作琐凭,整個隊(duì)列滿足題目隊(duì)列屬性
var reconstructQueue = function(people) {
people.sort((a, b ) => {
if(b[0] !== a[0]) {
return b[0] - a[0]
} else {
return a[1] - b[1]
}
})
let queue=[]
for(let i in people){
let pos = people[i][1]
queue.splice(pos,0,people[i])
}
return queue
};
用最少數(shù)量的箭引爆氣球
力扣題目鏈接
自己的分析不足之處:未更新右邊界,用以判斷下一個氣球是否能覆蓋浊服。
參考思路:
局部最優(yōu):當(dāng)氣球出現(xiàn)重疊统屈,一起射胚吁,所用弓箭最少。全局最優(yōu):把所有氣球射爆所用弓箭最少愁憔。
var findMinArrowShots = function(points) {
points.sort((a,b)=>{
return a[0]-b[0]
})
let res=1
for(let i=0;i<points.length-1;i++){
if(points[i+1][0]>points[i][1]){
res++
}else{
points[i+1][1]= Math.min(points[i][1],points[i+1][1]) //注意這段代碼腕扶。。自己沒寫出來
}
}
return res
};