赞
踩
● 理论基础
● 455.分发饼干
● 376. 摆动序列
● 53. 最大子序和
关联 leetcode 455.分发饼干
先满足饼干
- func findContentChildren(g []int, s []int) int {
- sort.Ints(g)
- sort.Ints(s)
-
- child := 0//满足的孩子总数
- // 遍历饼干, 小满足小饼干
- for sIdx := 0; child < len(g) && sIdx < len(s); sIdx++ {
- if s[sIdx] >= g[child] {
- child++
- }
- }
- return child
- }
先满足胃口
- func findContentChildren(g []int, s []int) int {
- sort.Ints(g)
- sort.Ints(s)
-
- ret := 0 //满足的孩子总数
-
- // 倒序遍历胃口, 先找到胃口大的
- for gIdx, sIdx := len(g)-1, len(s)-1; sIdx >= 0 && gIdx >= 0; gIdx-- {
- if s[sIdx] >= g[gIdx] {
- ret++
- sIdx--
- }
- }
- return ret
- }
关联 leetcode 376. 摆动序列
思路
题解
- func wiggleMaxLength(nums []int) int {
- if len(nums) < 2 {
- return len(nums)
- }
- preDiff := 0 //前一个差
- curDiff := 0 //后一个差
- res := 1 //峰值个数,默认序列最右边算一个峰值
- for i := 0; i < len(nums)-1; i++ {
- curDiff = nums[i+1] - nums[i]
- // 出现摆动, 统一规则都删左边的元素, 所以对 preDiff 取 零值
- if (curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0) {
- res++
- preDiff = curDiff
- }
- }
- return res
- }
关联 leetcode 53. 最大子序和
思路
题解
- func maxSubArray(nums []int) int {
- res := nums[0] //最终结果
- count := 0 //当前连续和
- for i := 0; i < len(nums); i++ {
- count += nums[i]
- if count > res { //更新结果
- res = count
- }
- if count < 0 {//当前连续和为负数了, 重新开始计算连续和
- count = 0
- }
- }
- return res
- }
贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。
不用花心思去研究其规律, 没有思路就立刻看题解。
基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。
学完贪心之后再去看动态规划,就会了解贪心和动规的区别
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。