当前位置: 首页 > article >正文

代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

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

今天的内容比较简单 简单了解贪心是通过局部最优解反推全局最优解(有经验成分)

455.分发饼干

题目链接:455. 分发饼干 - 力扣(LeetCode)

讲解链接:代码随想录

 Java代码:

class Solution{
    //思路1 优先考虑饼干 小饼干先喂饱小胃口
    public int findContentChildren(int[] g, int[] s){
        Arrays.sort(s);
        Arrays.sort(g);
        int start = 0, count = 0;
        for(int i = 0; i < s.length && start < g.length; i++){
            if(s[i] >= g[start]){
                start++;
                count++;
            }
        }
        return count;
    }
}

 376. 摆动序列

题目链接:376. 摆动序列 - 力扣(LeetCode)

讲解链接:代码随想录

感觉这道题我只明白了摆动 但是对于三个特殊情况我想不到 还是得慢慢来思考

  1. 情况一:上下坡中有平坡
  2. 情况二:数组首尾两端
  3. 情况三:单调坡中有平坡

Java代码: 

class Solution{
    public int wiggleMaxLength(int[] nums){
        if(nums.length <= 1) return nums.length;
        //当前差值
        int curdiff = 0;
        //上一个差值
        int prediff = 0;
        int count = 1;
        for(int i = 1; i < nums.length; i++){
            //得到当前差值
            curdiff = nums[i] - nums[i - 1];
            //如果当前差值和上一个差值为一正一负
            //等于0 的情况 表示初始时的prediff
            if((curdiff > 0 && prediff <= 0) || (curdiff < 0 && prediff >= 0)){
                count++;
                prediff = curdiff;
            }
        }
        return count;
    }
}

 53. 最大子序和

题目链接:53. 最大子数组和 - 力扣(LeetCode)

讲解链接:代码随想录

这题可以暴力直接过 有可能TLE 还是看看贪心 这道题也能用前缀和 或者 dp做

class Solution{
    public int maxSubArray(int[] nums){
        if(nums.length == 1) return nums[0];
        int sum = Integer.MIN_VALUE;
        int count = 0;
        for(int i = 0; i < nums.length; i++){
            count += nums[i];
            sum = Math.max(sum, count);//取出区间累计最大值
            if(count <= 0){
                count = 0;//相当于重置最大子序起始位置
                //因为遇到负数一定拉低总和
            }
        }
        return sum;
    }
}

努力学习 找工作

 

 

 


http://www.kler.cn/a/449848.html

相关文章:

  • 【蓝桥杯——物联网设计与开发】基础模块8 - RTC
  • 数据库系统原理:数据恢复与备份策略
  • SWIFT基本使用
  • LeetCode 209. 长度最小的子数组 (C++实现)
  • 封装(2)
  • vuex如何进行状态管理?
  • 软考——RIP路由协议
  • 数据结构漫游记:静态链表的实现(CPP)
  • HTTP常见异常状态码
  • Android Bootable Recovery 中的 `bspatch.cpp` 文件详解
  • Tauri 开源 - 从零打造一款跨端的 AI 笔记
  • ubuntu 网络管理
  • Clickhouse 集群配置
  • Linux系统卡顿排查
  • PostgreSql+Pgpool-II配置高可用集群(超详细)
  • scrapy实战之新浪新闻爬虫
  • Linux 批量查找与替换的常用命令
  • C++中的字符串实现
  • ACl访问控制列表
  • 高校就业管理:系统设计与实现的全流程分析
  • 如何写好一份科技报告
  • Textual Dataset Distillation via Language Model Embedding
  • 计算机视觉技术未来发展趋势:创新与变革共舞
  • MHA binlog server
  • 代码随想录day22 | 回溯算法理论基础 leetcode 77.组合 77.组合 加剪枝操作 216.组合总和III 17.电话号码的字母组合
  • 【蓝碳】基于GEE云计算、多源遥感、高光谱遥感技术、InVEST模型、PLUS模型的蓝碳储量估算;红树林植被指数计算及提取