刷题07

贪心的本质是选择每一阶段的局部最优,从而达到全局最优

贪心没有套路,说白了就是常识性推导加上举反例。

贪心算法一般分为如下四步:

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

分发饼干

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int start=0;
        for(int i=0;i<s.length;i++)
        {
            if(start<g.length&&s[i]>=g[start])
            {
                start++;
            }
        }
        return start;
    }
}

摆动序列

class Solution {
    public int wiggleMaxLength(int[] nums) {
       int pre=0;
       int cur=0;
       int count=1;
       for(int i=0;i<nums.length-1;i++)
       {
           cur=nums[i+1]-nums[i];
           if(cur>0&&pre<=0||cur<0&&pre>=0)
           {
               count++;
               pre=cur;
           }
       }
       return count;
    }
}

最大子序和

class Solution {
    public int maxSubArray(int[] nums) {
        int result=Integer.MIN_VALUE;
        int count=0;
        for(int i=0;i<nums.length;i++)
        {
            count+=nums[i];
            if(count>result) result=count;
            if(count<=0) count=0;
        }
        return result;
    }
}

买卖股票的最佳时机

class Solution {
    public int maxProfit(int[] prices) {
        int max=0;
        for(int i=0;i<prices.length-1;i++)
        {
            if(prices[i+1]-prices[i]>0)
            {
                max+=prices[i+1]-prices[i];
            }
        }
        return max;
    }
}
posted @ 2022-02-07 21:46  一刹流云散  阅读(23)  评论(0编辑  收藏  举报