首页 > 编程语言 >Day 27 贪心算法 Part01

Day 27 贪心算法 Part01

时间:2024-07-29 20:07:40浏览次数:17  
标签:cnt 27 nums Part01 max sum sign int Day

455. 分发饼干

思路:既然要满足最多的小孩吃到饼干,那么肯定优先满足胃口小的更能满足最多的。因此,先对两个数组排序。每次选择最小的能满足当前孩子的饼干。

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int i_g = 0, i_s = 0;
        int cnt = 0;
        while(i_g < g.length && i_s < s.length){
            if( g[i_g] <= s[i_s]) {
                cnt++;
                i_g++; i_s++;
            }else{
                i_s++;
            }
        }
        return cnt;
    }
}

376. 摆动序列

这个思路是抄一个题解的,简单说一下吧。这里最终返回的结果可以看作是变化的次数。若上一次遍历是上升,这次遍历是下降,则结果加一;若上一次下降,这次上升,结果加一;其他的几种情况,例如上次上升,这次继续上升,上次下降这次继续下降,以及没有发生变化,则不统计。

这个思路与官解中贪心的解法是一致的,不过更好理解。

class Solution {
    public int wiggleMaxLength(int[] nums) {
        int cnt = 1;
        int sign = -1; //sign == 0 代表前一个小于后一个(也就是上升)  == 1代表大于后一个(下降)
        for(int i = 0; i < nums.length - 1; i++){
            if(nums[i] - nums[i+1] == 0) continue; //== 0 代表既不是上升也不是下降,因此可以删除
            else if(nums[i] - nums[i+1] > 0){
                if(sign != 1){ cnt++; sign = 1;}  //若前一次遍历时不是下降,说明找到了峰(找到了上升趋势)
            }else{
                if(sign != 0) { cnt++; sign = 0; } //同理
            }
        }
        return cnt;
        
    }
}

53. 最大子数组和

class Solution {
    public int maxSubArray(int[] nums) {
        int max = nums[0];
        int sum = 0;
        for(int i = 0; i < nums.length; i++){
            if(sum < 0) sum = 0;
            sum += nums[i];
            max = Math.max(max, sum);
        }
        return max;
    }
}

标签:cnt,27,nums,Part01,max,sum,sign,int,Day
From: https://www.cnblogs.com/12sleep/p/18330932

相关文章

  • Java初学-Day3
    一、数据类型(本期只讲基本数据类型)变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。Jav......
  • JAVA小白学习日记Day12
    CSS定位1.定位属性 在CSS中,position属性用于指定元素在文档流中的定位方式。常用的取值包括:static:默认值,元素遵循正常的文档流布局,不受top、right、bottom、left属性的影响。relative:元素相对于其正常位置进行定位,通过top、right、bottom、left属性可以调整元素相......
  • DAY13 二叉树part01
     今日任务 二叉树的递归遍历(前中后)二叉树的迭代遍历(前中后)二叉树的统一迭代遍历二叉树的层序遍历(共十道题目)完成情况递归已掌握,代码略迭代前中手写一编,后和统一未学习层序遍历题目如下102.二叉树的层序遍历1/**2*Definitionforabinarytreenode.3*s......
  • C语言day06(数组、字符数组)
    C语言day06【1】数组1》概念:具有一定顺序的若干变量的集合2》定义格式:存储类型数据类型数组名[元素的个数]例:intarr[5];//定义了一个数组arr,在内存空间中开辟了5个空间来储值在数组中保存的每一条数据都叫(元素)变量数组名:代表数组的首地址(地址常量);数组......
  • 深度学习与图像识别day5(机器学习基础)
    线性问题主要处理回归问题,回归问题即预测一个连续问题的数值。计算决定系数(R-squared,也称为R²或系数决定)是衡量回归模型预测准确性的一个常用指标。R-squared值越接近1,表示模型的预测性能越好;如果R-squared值为0,则表示模型只是简单地预测了目标变量的平均值;如果R-squared值为负,......
  • Day09
    二进制0b八进制0十六进制0x最好避免使用浮点数进行比较float具有舍入误差接近但不等于所有的字符本质上还是数字强制转换的格式......
  • Java学习笔记day07
    多线程基本了解1.多线程_线程和进程进程:在内存中执行的应用程序线程:是进程中最小的执行单元线程作用:负责当前进程中程序的运行.一个进程中至少有一个线程,一个进程还可以有多个线程,这样的应用程序就称之为多线程程序简单理解:一个功能就需要一......
  • day23-back tracking-part02-7.25
    tasksfortoday:1.39.组合总和2.40.组合总和II3.131.分割回文串----------------------------------------------------------1.39.组合总和INthispractice,thekeychangeistherequirementthattheelementcanberepetativelyused,whichcanbeachievedby......
  • day22-back tracking-part01-7.24
    tasksfortoday:1.回溯理论基础2.77.组合3.216.组合总和III4.17.电话号码的字母组合-------------------------------------------------------------------1.回溯理论基础-什么是回溯:在二叉树系列中,我们已经不止一次,提到了回溯,回溯是递归的副产品,只要有递归就......
  • day27-greedy-part01-7.29
    tasksfortoday:1.理论基础2.455.分发饼干3.376.摆动序列4.53.最大子序和------------------------------------------------------------------1.理论基础(1)贪心的本质是选择每一阶段的局部最优,从而达到全局最优。经常与贪心算法放在一起进行比较的就是动态规划,以下是......