day30|贪心

455 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

这道题的想法是:倒着来遍历已经排好序的胃口数组,用大饼干满足大胃口。

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

 376.

https://leetcode.cn/problems/wiggle-subsequence/

代码随想录 给了很详细的讲解,自己做真的不会

 

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

53.这道题用暴力解法超时/(ㄒoㄒ)/~~,贪心算法的想法是:

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。

全局最优:选取最大“连续和”

class Solution {
    public int maxSubArray(int[] nums) {
        int result = Integer.MIN_VALUE;//令result为int类型里的最小值,
//这样即使nums数组里一直是负数,result也能更新成那个最大的负数
        int sum = 0;
        for(int i = 0; i < nums.length;i++){
            sum = sum + nums[i];
//更新result,这里不管正数还是负数都更新
            result = Math.max(sum,result);
            if(sum < 0){
//sum为小于0的,加上只会是累赘,抛弃,重新开始加
                sum = 0;
            }
        }
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值