代码随想录算法训练营 您所在的位置:网站首页 代码随想录算法训练营 代码随想录算法训练营

代码随想录算法训练营

2024-03-19 10:38| 来源: 网络整理| 查看: 265

第八章 贪心算法 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 实验室设备网 版权所有