代码随想录-算法训练营day31(贪心算法01:分发饼干,摆动序列,最大子数组和)

bash 复制代码
第八章 贪心算法 part01
 
● 理论基础 
● 455.分发饼干 
● 376. 摆动序列 
● 53. 最大子序和 
 
贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 
 
不用花心思去研究其规律, 没有思路就立刻看题解。
 
基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。  
 
学完贪心之后再去看动态规划,就会了解贪心和动规的区别。
 
详细布置 
 
理论基础 
 
https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html  
 
455.分发饼干  
 
https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html  
 
376. 摆动序列  
 
https://programmercarl.com/0376.%E6%91%86%E5%8A%A8%E5%BA%8F%E5%88%97.html  
 
53. 最大子序和  
 
https://programmercarl.com/0053.%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C.html  
 
往日任务
● day 1 任务以及具体安排:https://docs.qq.com/doc/DUG9UR2ZUc3BjRUdY  
● day 2 任务以及具体安排:https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG  
● day 3 任务以及具体安排:https://docs.qq.com/doc/DUGdqYWNYeGhlaVR6 
● day 4 任务以及具体安排:https://docs.qq.com/doc/DUFNjYUxYRHRVWklp 
● day 5 周日休息
● day 6 任务以及具体安排:https://docs.qq.com/doc/DUEtFSGdreWRuR2p4 
● day 7 任务以及具体安排:https://docs.qq.com/doc/DUElCb1NyTVpXa0Jj 
● day 8 任务以及具体安排:https://docs.qq.com/doc/DUGdsY2JFaFhDRVZH 
● day 9 任务以及具体安排:https://docs.qq.com/doc/DUHVXSnZNaXpVUHN4 
● day 10 任务以及具体安排:https://docs.qq.com/doc/DUElqeHh3cndDbW1Q 
●day 11 任务以及具体安排:https://docs.qq.com/doc/DUHh6UE5hUUZOZUd0 
●day 12 周日休息 
●day 13 任务以及具体安排:https://docs.qq.com/doc/DUHNpa3F4b2dMUWJ3 
●day 14 任务以及具体安排:https://docs.qq.com/doc/DUHRtdXZZSWFkeGdE 
●day 15 任务以及具体安排:https://docs.qq.com/doc/DUHN0ZVJuRmVYeWNv 
●day 16 任务以及具体安排:https://docs.qq.com/doc/DUHBQRm1aSWR4T2NK 
●day 17 任务以及具体安排:https://docs.qq.com/doc/DUFpXY3hBZkpabWFY 
●day 18 任务以及具体安排:https://docs.qq.com/doc/DUFFiVHl3YVlReVlr 
●day 19 周日休息
●day 20 任务以及具体安排:https://docs.qq.com/doc/DUGFRU2V6Z1F4alBH  
●day 21 任务以及具体安排:https://docs.qq.com/doc/DUHl2SGNvZmxqZm1X 
●day 22 任务以及具体安排:https://docs.qq.com/doc/DUHplVUp5YnN1bnBL  
●day 23 任务以及具体安排:https://docs.qq.com/doc/DUFBUQmxpQU1pa29C 
●day 24 任务以及具体安排:https://docs.qq.com/doc/DUEhsb0pUUm1WT2NP  
●day 25 任务以及具体安排:https://docs.qq.com/doc/DUExTYXVzU1BiU2Zl 
●day 26 休息 
●day 27 任务以及具体安排:https://docs.qq.com/doc/DUElpbnNUR3hIbXlY 
●day 28 任务以及具体安排:https://docs.qq.com/doc/DUG1yVHdlWEdNYlhZ  
●day 29 任务以及具体安排:https://docs.qq.com/doc/DUHZYbWhwSHRCRmp3 
●day 30 任务以及具体安排:https://docs.qq.com/doc/DUEdTVVhxbnJiY3BR

day31

分发饼干

复制代码
 //优先满足大胃口
 class Solution {
     public int findContentChildren(int[] g, int[] s) {
         //贪心无套路,也不用严格证明,局部最优能推出全局最优即可
         //大饼干尽量满足胃口大的孩子
         //或者尽量用小饼干去满足一个小孩
         Arrays.sort(g);//记得排序
         Arrays.sort(s);
         int sindex = s.length - 1;
         int result = 0;
         for(int i = g.length - 1; i>=0;i--){//遍历大胃口,有限考虑大胃口
             if( sindex >= 0 && s[sindex] >= g[i]){
                 result++;
                 sindex--;
             }
         }
         return result;
     }
 }
 //优先利用小饼干
 class Solution {
     public int findContentChildren(int[] g, int[] s) {
         //贪心无套路,也不用严格证明,局部最优能推出全局最优即可
         //大饼干尽量满足胃口大的孩子
         //或者尽量用小饼干去满足一个小孩
         Arrays.sort(g);//记得排序
         Arrays.sort(s);
         int result = 0;
         int gstart = 0;
         for(int i = 0; i < s.length ; i++){//遍历小饼干,尽量去满足一个小孩
             if( gstart <= g.length - 1 && s[i] >= g[gstart] ){
                 result++;
                 gstart++;
             }
         }
         return result;
     }
 }

摆动序列

复制代码
 class Solution {
     public int wiggleMaxLength(int[] nums) {
         //双指针记录坡度变化
         int pre = 0;
         int last = 0;
         int result = 1;//默认最后有一个坡
         for( int i = 0; i < nums.length - 1; i++ ){//不用判断最后一个
             last = nums[i + 1] - nums[i];
             if( pre >= 0 && last < 0  || pre <= 0 && last > 0){
                 result++;
                 pre = last;//只在坡度方向有变化的时候才更改
             }
         }
         return result;
     }
 }

最大子数组和

复制代码
 class Solution {
     public int maxSubArray(int[] nums) {
         //连续和为负数直接抛弃
         int sum = 0;
         int result = nums[0];
         for( int i = 0; i < nums.length; i++){
             sum += nums[i];
             if( sum > result) result = sum;
             if( sum < 0) sum = 0;//不如重新开始
         }
         return result;
     }
 }

感谢大佬分享:

代码随想录-算法训练营day31【贪心算法01:理论基础、分发饼干、摆动序列、最大子序和】-CSDN博客

相关推荐
Pacify_The_North10 分钟前
【进程控制二】进程替换和bash解释器
linux·c语言·开发语言·算法·ubuntu·centos·bash
L汐30 分钟前
02 K8s双主安装
java·容器·kubernetes
轮到我狗叫了31 分钟前
力扣310.最小高度树(拓扑排序,无向图),力扣.加油站力扣.矩阵置零力扣.二叉树中的最大路径和
算法·leetcode·职场和发展
埃菲尔铁塔_CV算法34 分钟前
深度学习驱动下的目标检测技术:原理、算法与应用创新(二)
深度学习·算法·目标检测
wuqingshun31415937 分钟前
经典算法 (A/B) mod C
c语言·开发语言·c++·算法·蓝桥杯
白杆杆红伞伞40 分钟前
04_决策树
算法·决策树·机器学习
爱coding的橙子44 分钟前
算法刷题Day9 5.18:leetcode定长滑动窗口3道题,结束定长滑动窗口,用时1h
算法·leetcode·职场和发展
姬公子5211 小时前
leetcodehot100刷题——排序算法总结
数据结构·c++·算法·排序算法
jackson凌1 小时前
【Java学习笔记】【第一阶段项目实践】房屋出租系统(面向对象版本)
java·笔记·学习
带刺的坐椅1 小时前
Solon Ai Flow 编排开发框架发布预告(效果预览)
java·ai·solon·dify·solon-flow