代码随想录算法训练营 | 您所在的位置:网站首页 › 代码随想录算法训练营 › 代码随想录算法训练营 |
第八章 贪心算法
455.分发饼干376.摆动序列53.最大子序和代码随想录文章详解总结
455.分发饼干
对饼干和胃口进行排序 遍历胃口,若当前饼干值 for j count++ j++ } } return count } 376.摆动序列 (1)贪心 寻找最长子摆动序列:只需记录波峰+波谷出现的次数。对于序列两端的元素,只有一侧相邻元素小于或大于当前元素也满足要求 若遇到平坡,只需在坡度发生摆动变化时记录 func wiggleMaxLength(nums []int) int { if len(nums) curDiff = nums[i] - nums[i-1] if preDiff 0 || preDiff >= 0 && curDiff if len(nums) if nums[i] up = max(down+1, up) } } return max(up, down) } 53.最大子序和最大连续子序和 (1)贪心 若以nums[i]结尾求和小于当前值,取当前值,否则继续求和覆盖当前值。最大值为整个遍历过程中连续求和的最大值 func maxSubArray(nums []int) int { if len(nums) == 1 { return nums[0] } res := nums[0] for i := 1; i nums[i] = nums[i-1] + nums[i] } res = max(res, nums[i]) } return res }(2)动态规划 以nums[i]结尾的最大连续子序列和:前一个最大和+ 当前值,或者直接选当前值 然后选取序列中和最大的结果 func maxSubArray(nums []int) int { dp := make([]int, len(nums)) dp[0] = nums[0] res := dp[0] for i := 1; i |
CopyRight 2018-2019 实验室设备网 版权所有 |