【代码随想录——贪心算法——一周目】

【代码随想录——贪心算法——一周目】

码农世界 2024-06-04 前端 90 次浏览 0个评论

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
    }
    

转载请注明来自码农世界,本文标题:《【代码随想录——贪心算法——一周目】》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,90人围观)参与讨论

还没有评论,来说两句吧...

Top