首页 > 其他分享 >贪心

贪心

时间:2022-11-11 10:47:31浏览次数:54  
标签:饼干 nums int 孩子 数组 序列 贪心

455. 分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

  • 把孩子的胃口排序,先看胃口最大的孩子可不可以得到满足

  • 把饼干排序,如果孩子的最大所需小于等于最大饼干,直接把最大饼干分给胃口最大的孩子。

class Solution {
    public int findContentChildren(int[] g, int[] s) {

        if(s.length==0){
            return 0;//饼干都没有 满足谁?
        }

        Arrays.sort(g);//给孩子的胃口从小到大排序
        Arrays.sort(s);//给饼干按从小到大的顺序排序

        int count = 0;//满足孩子的个数
        for (int i = g.length-1; i>=0; i--) {
            // 遍历孩子的胃口
            for (int j = s.length-1; j >=0; j--) {
                // 遍历每一块饼干
                if(g[i]<=s[j]){
                    count++;//如果找到可以满足孩子胃口的饼干,饼干++
                    s=delete(s,j);//删除该饼干并更新饼干数组
                    break;
                }
            }
        }
        return count;
    }

    // 删除数组中元素的做法
    private int[] delete(int[] s, int index) {
        for (int i = index; i < s.length-1; i++) {
            s[i] = s[i+1];
        }
        return Arrays.copyOf(s, s.length - 1);
    }
} 



376. 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。
子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。
给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

保持区间波动,只需要把单调区间上的元素移除就可以了

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if(nums.length==1){
            return 1;//一个元素的序列也视为摆动序列
        }
        int preDiff = 0;
        int curDiff = 0;
        int count = 1;
        for(int i = 1;i<nums.length;i++){
            curDiff = nums[i]-nums[i-1];//当前的差值
            if(curDiff>0&&preDiff<=0 || curDiff<0&&preDiff>=0){//满足摆动序列的条件
                count++;
                preDiff = curDiff;//注意这行要放在if里面
            }     
        }
        return count;
    }
}



53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。

  • 计算起点的时候,一定是从正数开始计算,因为负数只会拉低总和

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

  • 如果数组中根本就没有正数,那么数组中的最大值即为所求

class Solution {
    public int maxSubArray(int[] nums) {
        int sum = Integer.MIN_VALUE;
        int result = Integer.MIN_VALUE;
        //先遍历数组,求出数组中的最大值
        for(int i = 0;i<nums.length;i++){
            result = Math.max(nums[i],result);//求取数组最大值
        }
        if(result<=0){
            return result;//数组中没有正数,返回数组的最大值
        } else {
            result = Integer.MIN_VALUE;//数组中有正数的话,那还有的盘,重置result
        }

        //下面是数组中有正数的情况  
        for(int i = 0;i<nums.length;i++){
            //从正数开始遍历
            if(nums[i]<=0 && sum==Integer.MIN_VALUE){
                continue;
            }
            if(sum==Integer.MIN_VALUE){
                sum = nums[i];//开始遍历的位置
                result = Math.max(result,sum);//每加一个数,都更新最大和
            } else{
                sum += nums[i];//
                result = Math.max(result,sum);//每加一个数,都更新最大和
            }
            if(sum<0){
                sum = Integer.MIN_VALUE;//连续和为负数,立刻放弃,并重置sum
                continue;
            }   
        }
        return result;
    }
}

相关文章

  • 20221007_T1A-_贪心/树形dp
    题意给定一个树,求经过\(k\)个不同点所需要的步骤。以及给出一个方案。题解赛时得分:5/100不知道赛时哪里写错了。能想到找出以1开始的直径,直径上的点是必定会走的......
  • 【UOJ 494】DNA序列(贪心)(Lyndon分解)
    DNA序列题目链接:UOJ494题目大意给你n个字符串,要你每个都选一段非空前缀按某种顺序拼在一起使得形成的大字符串字典序最小。思路假设如果知道插入的顺序,我们要怎么......
  • 贪心算法_Leetcode刷题_7/100
    贪心算法采用贪心策略,保证每次操作是局部最优的,从而使随后结果是全局最优的。455.分配饼干贪心策略:尽量把最小的饼干分配给胃口最小的孩子。我的代码:算法描述:将......
  • Great Sequence (CF2,C) (贪心)
    思路:最后转化成一个链,然后贪心地从链的一端处理即可! #include<bits/stdc++.h>usingnamespacestd;#defineM2000005#defineriregisterintlonglo......
  • 五大基本算法:贪心算法
    今天是学习算法的第一天,以后每天都会坚持学习一个算法,当然是要学懂学会,而不是浅尝辄止.每一个学会的算法都会记录下来,以方便后面复习查阅.贪心算法有很多经典的应......
  • 洛谷P8775 [蓝桥杯 2022 省 A] 青蛙过河 题解 贪心+二分答案
    题目链接​​https://www.luogu.com.cn/problem/P8775​​题目大意小青蛙住在一条河边,它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。河里的石头排成了一条......
  • 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码
    1.贪心算法概览贪心算法是一种算法思想。希望能够满足限制的情况下将期望值最大化。比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树等问题都希望满足限制的情......
  • 【Note】贪心
    感谢$\text{orzws/chy}$倾情授课。目录-1.证明方式0.朴素贪心AT2557[ARC073C]BallColoringP2587[ZJOI2008]泡泡堂1.排序AT2672[AGC018C]CoinsP2123皇后游......
  • CF 2500 贪心
    I.Square-freedivision(hardversion)考虑dp,设\(f_{i,j}\)表示考虑了前\(i\)个数,修改了\(j\)个分割的最小数量的子段。枚举上一个子段的结尾\(k\),并设\(val(i......
  • 区间贪心问题总结
    区间分组这类问题指的是如何将n个互有交集的区间分成k组,使得这k组中每一组中所安排的任务不发生冲突,同时我们还希望让k尽可能的小。这种问题的解决方法是按照区间的左端点......