import "sort"
// 860. 柠檬水找零
func lemonadeChange(bills \[\]int) bool {
//如果最开始就大于5元,肯定无法找零直接返回false
if len(bills) > 0 && bills0 > 5 {
return false
}
five := 0
ten := 0
twenty := 0
for i := 0; i < len(bills); i++ {
//等于5元直接收下不用找零,five++
if billsi == 5 {
five++
//如果是10元,且有5元可以找零
} else if billsi == 10 && five > 0 {
ten++
five--
} else if billsi == 20 && five > 0 {
//如果是20元,可以找10元+5元或者3个五元,优先采用10+5方式
if ten > 0 {
twenty++
ten--
five--
} else {
if five < 3 {
return false
}
five -= 3
}
//如果没有五元找零,直接返回false
} else if five == 0 && (billsi == 10 || billsi == 20) {
return false
}
}
return true
}
func reconstructQueue(people \[\]\[\]int) \[\]\[\]int {
sort.Slice(people, func(i, j int) bool {
if peoplei0 == peoplej0 { //如果身高相等则按照k从小到大排序
return peoplei1 < peoplej1
}
return peoplei0 > peoplej0 //身高由大到小排序
})
// 再按照K进行插入排序,优先插入K小的
for i := 0; i < len(people); i++ {
p := peoplei
copy(peoplep\[1+1:i+1], peoplep\[1:i+1])
peoplep\[1] = p
}
return people
}
func findMinArrowShots(points \[\]\[\]int) int {
if len(points) == 0 {
return 0
}
arrow := 1 //弓箭数量
//按第一位从小到大排序
sort.Slice(points, func(i, j int) bool {
return pointsi0 < pointsj0
})
for i := 1; i < len(points); i++ {
//如果前一个右边界比当前左边界小说明无法一起射破,需要增加一支箭
if pointsi-11 < pointsi0 {
arrow++
} else {
// 如果当前边界比之前边界大,则沿用之前边界
if pointsi1 > pointsi-11 {
pointsi1 = pointsi-11
}
}
}
return arrow
}