刷题07

2022/2/7 23:19:50

本文主要是介绍刷题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;
    }
}


这篇关于刷题07的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程