题目:455. 分发饼干
思路:
贪心,思路是尽量先给胃口值小的分,饼干也是从小的开始分:
- 如果饼干满足了胃口值,结果+1换下一个人,下一个饼干
- 如果饼干满足不了胃口值,换下一个饼干(满足不了胃口值小的一定满足不了大的)
代码:
func findContentChildren(g []int, s []int) int {
res := 0
sort.Ints(g)
sort.Ints(s)
leng, lens := len(g), len(s)
for i, j :=0, 0; i < lens&& j < leng; i++ {
if s[i] >= g[j] {
j++
res++
}
}
return res
}
参考:
题目:376. 摆动序列
思路:
大小转换成折线,要的就是起伏,也就是说找三个数,如果是单调的就删除中间多余的。
代码:
func wiggleMaxLength(nums []int) int {
lens := len(nums)
if lens < 2 {
return lens
}
res := 1
pre := nums[1] - nums[0]
if pre != 0 {
res = 2
}
for i := 2; i < lens; i++ {
now := nums[i] - nums[i-1]
if now > 0 && pre <= 0 || now < 0 && pre >= 0 { //
res ++
pre = now
}
}
return res
}
参考:
题目:53. 最大子序和
思路:
以前就做过的题,因为是需要连续,就直接遍历就可以了:
- 首先sum加上当前的数,然后判断一次max
- 如果当前的sum小于0,直接把当前舍弃掉,sum = 0,因为这一段范围对后面带来的只有负面影响
代码:
func maxSubArray(nums []int) int {
res, sum := math.MinInt32, 0
for _, x := range nums {
sum += x
res = max(sum, res)
if sum < 0 {
sum = 0
continue
}
}
return res
}
func max(a,b int) int {
if a > b {
return a
}
return b
}