1.贪心算法理论基础
贪心算法一般步骤如下:
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
2.分发饼干
解题思路:每个人拿到刚好或尽可能接近能够满足自己的饼干。
func findContentChildren(g []int, s []int) int { result :=0 si := 0 sort.Ints(g) sort.Ints(s) for i := 0; i < len(g); { if si==len(s){ break } if g[i]<=s[si]{ result++ si++ i++ }else{ si++ } } return result }
3.摆动序列
解题思路:通过相邻两个数之差进行判断
func wiggleMaxLength(nums []int) int { var prev int res := 1 i := 1 for i < len(nums) && nums[i] - nums[0] == 0 { i++ } if i == len(nums) { return res } res++ prev = nums[i] - nums[0] i++ for i < len(nums){ if (nums[i] - nums[i-1]) * prev < 0 { prev = nums[i] - nums[i-1] res++ } i++ } return res }
4.最大子序和
解题思路:需要考虑整个数组都是负数的情况。
func maxSubArray(nums []int) int { max := nums[0] count := 0 for i := 0; i < len(nums); i++{ count += nums[i] if count > max{ max = count } if count < 0 { count = 0 } } return max }
还没有评论,来说两句吧...