算法题——贪心算法

455.分发饼干

将饼干和胃口都排序,让小的饼干优先喂给胃口小的,这样能满足的孩子最多

java 复制代码
class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int res = 0;
        int gIndex=0;
        int sIndex=0;
        while(gIndex<g.length && sIndex<s.length){
            if(s[sIndex]>=g[gIndex]){
                res++;
                sIndex++;
                gIndex++;
            }else{
                sIndex++;
            }
        }
        return res;
    }
}

376.摆动序列

用count记录出现摆动序列的个数,起始有一个,用prediff记录上一次非0差值的符号,每次判断符号是否相同,若不同则count+1,同时更新prediff

java 复制代码
class Solution {
    public int wiggleMaxLength(int[] nums) {
        if(nums.length<=1) return nums.length;
        int count = 1; //最少有一个摆动序列
        int prediff = 0;
        for(int i=1;i<nums.length;i++){
            int diff = nums[i]-nums[i-1];
            if(prediff>=0 && diff<0 || prediff<=0 && diff>0){
                count++;
                prediff = diff;
            }
        }
        return count;
    }
}

53.最大子数组和

遍历数组的过程中,如果目前的子数组之和小于或等于0,那么这一段一定不在最大子数组中,因为这会拉低最大子数组的和,因此每次该记录最大和还是记录到res中,但如果sum<=0,就需要重置子数组的起始位置(将sum置为0即可,意思是重新算一个子数组)

java 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        int sum = 0;
        int res = Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
            res = Math.max(res, sum);
            if(sum<=0) sum=0; //如果子数组和不大于0,那么这段子数组一定不在目标子数组中,重置起始位置和sum
        }
        return res;
    }
}
相关推荐
愚者游世3 分钟前
力扣解决二进制&题型常用知识点梳理
c++·程序人生·算法·leetcode·职场和发展·改行学it
Geoking.6 分钟前
前缀和算法:从一道 LeetCode 题看区间求和优化思想
算法·leetcode·职场和发展
爱吃rabbit的mq9 分钟前
第7章 逻辑回归:二分类的基础
算法·分类·逻辑回归
DFT计算杂谈11 分钟前
VASP+Wannier90 计算位移电流和二次谐波SHG
java·服务器·前端·python·算法
执着25916 分钟前
力扣102、二叉树的层序遍历
数据结构·算法·leetcode
Tisfy19 分钟前
LeetCode 2976.转换字符串的最小成本 I:floyd算法(全源最短路)
算法·leetcode··floyd·题解
v_for_van22 分钟前
力扣刷题记录4(无算法背景,纯C语言)
c语言·算法·leetcode
dazzle29 分钟前
Python数据结构(十五):归并排序详解
数据结构·python·算法
2301_7644413344 分钟前
基于paCy模型与jsoncrack进行依存句法分析
python·算法·自然语言处理