// 分发饼干,局部最优推全局最优
func DistributeCookieII(g, s []int) int {
var count int
sort.Ints(g)
sort.Ints(s)
left, right := len(g)-1, len(s)-1
for left >= 0 && right >= 0 {
if s[right] > g[left] {
count++
right--
left--
}
left--
}
return count
}
摆动序列
找到规律,波峰波谷可以精准找到摆动点
// 摆动序列,返回其符合摆动条件的子序列长度
func SwingSequenceII(nums []int) int {
if len(nums) < 2 {
return len(nums)
}
// 找到波峰和波谷
var count int
preCut, curCut := 0, 0
for i := 1; i < len(nums);i++ {
curCut = nums[i] - nums[i-1]
if (preCut <= 0 && curCut > 0) || (preCut >=0 && curCut < 0) {
count++
preCut = curCut
}
}
return count
}