【贪心算法1】

力扣455.分发饼干

链接: link

思路

尽可能让更多人吃到饼干并且尽可能少的造成浪费,大尺寸饼干能满足大胃口的人就应该优先分给大胃口的人。所以先将饼干和胃口大小排序,然后从后往前遍历。但是这时候又有一个问题,饼干和胃口哪个作为for循环哪个作为if呢?答案是只能胃口作为for,饼干作为if,因为for循环的i是固定每次移动,而饼干index只有满足条件才会移动。这里可以举一个反例,如果最大胃口大于最大的饼干,以饼干为for循环,胃口为if,那么for循环遍历下来,所有人都分不到饼干。

方法1:

javascript 复制代码
class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int index = s.length - 1;
        int cnt = 0;
        // 遍历胃口
        for(int i = g.length - 1;i>=0;i--){
            if(index>=0&&s[index]>=g[i]){
                cnt++;
                index--;
            }
        }
        return cnt;
    }
}

376.摆动序列

链接: link

思路

这道题看起代码简单,但是要考虑的情况很多,直接参考链接内容吧

javascript 复制代码
class Solution {
    public int wiggleMaxLength(int[] nums) {
        if (nums.length <= 1) {
            return nums.length;
        }
        // 当前节点 - 前一个节点
        int pre = 0;
        // 后一个节点 - 当前节点
        int next = 0;
        int res = 1;
        for (int i = 0; i < nums.length - 1; i++) {
            next = nums[i + 1] - nums[i];
            // 出现峰值
            if ((pre >= 0 && next < 0) || (pre <= 0 && next > 0)) {
                res++;
                pre = next;
            }
        }
        return res;
    }
}

53.最大子数组和

链接: link

javascript 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        if(nums.length == 1){
            return nums[0];
        }
        int sum = Integer.MIN_VALUE;
        int cnt = 0;
        for(int i = 0;i<nums.length;i++){
            cnt += nums[i];
            if(cnt>=sum){
                sum = cnt;
            }
            if(cnt<0){ // 注意 只有区间和为负数时才会重置
                cnt = 0;
            }
        }
        return sum;
    }
}
相关推荐
君万20 分钟前
【LeetCode每日一题】94. 二叉树的中序遍历 104. 二叉树的最大深度
算法·leetcode·golang
Imxyk22 分钟前
力扣:2322. 从树中删除边的最小分数
数据结构·算法·leetcode
农场主John23 分钟前
(双指针)LeetCode 209 长度最小的子数组
数据结构·算法·leetcode
程序员Xu24 分钟前
【LeetCode热题100道笔记】前 K 个高频元素
笔记·算法·leetcode
Asmalin24 分钟前
【代码随想录day 23】 力扣 93.复原IP地址
算法·leetcode
AMiner:AI科研助手3 小时前
警惕!你和ChatGPT的对话,可能正在制造分布式妄想
人工智能·分布式·算法·chatgpt·deepseek
CHANG_THE_WORLD6 小时前
并发编程指南 同步操作与强制排序
开发语言·c++·算法
gaoshou457 小时前
代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字
数据结构·算法
自信的小螺丝钉7 小时前
Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分
算法·leetcode·矩阵
KING BOB!!!9 小时前
Leetcode高频 SQL 50 题(基础版)题目记录
sql·mysql·算法·leetcode