LeetCode:贪心算法

news2025/6/1 16:20:57

目录

一、分发饼干

二、摆动序列

三、最大子数组和

四、买卖股票的最佳时机II

五、跳跃游戏

六、跳跃游戏II

七、K次取反后最大化的数组和

八、加油站

九、分发糖果

十、柠檬水找零

十一、根据身高重建队列

十二、用最少数量的箭引爆气球

十三、无重叠区间

十四、划分字母区间

十五、合并区间

十六、单调递增的数字


一、分发饼干

455. 分发饼干 - 力扣(LeetCode)

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(s);
        Arrays.sort(g);
        int index=s.length-1;//饼干下标
        int result=0;//可满足的孩子数量
        for(int i=g.length-1;i>=0;i--){
            if(index>=0&&s[index]>=g[i]){//饼干的尺寸大于等于孩子的胃口
                result++;//满足的孩子+1
                index--;//下标左移
            }
        }
        return result;
    }
}

二、摆动序列

376. 摆动序列 - 力扣(LeetCode)

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if(nums.length<=1)return nums.length;
        int cur=0;
        int pre=0;
        int result=1;
        for(int i=0;i<nums.length-1;i++){
            cur=nums[i+1]-nums[i];
            if((cur>0&&pre<=0)||(cur<0&&pre>=0)){
                result++;
                pre=cur;
            }
        }
        return result;
    }
}

三、最大子数组和

53. 最大子数组和 - 力扣(LeetCode)

class Solution {
    public int maxSubArray(int[] nums) {
        int result=Integer.MIN_VALUE;
        int count=0;
        for(int i=0;i<nums.length;i++){
            count+=nums[i];
            result=Math.max(count,result);
            if(count<=0)count=0;//相当于重置最大子序列起始位置,因为遇到负数一定是拉低总和
        }
        return result;
    }
}

四、买卖股票的最佳时机II

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

class Solution {
    public int maxProfit(int[] prices) {
        int res=0;
        for(int i=1;i<prices.length;i++){
            res+=Math.max(prices[i]-prices[i-1],0);//找每日的正利润
        }
        return res;
    }
}

五、跳跃游戏

55. 跳跃游戏 - 力扣(LeetCode)

class Solution {
    public boolean canJump(int[] nums) {
        int cover=0;
        if(nums.length==1)return true;
        for(int i=0;i<=cover;i++){
            cover=Math.max(i+nums[i],cover);
            if(cover>=nums.length-1)return true;
        }
        return false;
    }
}

六、跳跃游戏II

45. 跳跃游戏 II - 力扣(LeetCode)

class Solution {
    public int jump(int[] nums) {
        int curcover=0;
        int nextcover=0;
        int count=0;
        if(nums.length==1)return count;
        for(int i=0;i<=curcover;i++){
            nextcover=Math.max(i+nums[i],nextcover);
            if(i==curcover){
                count++;
                curcover=nextcover;
                if(nextcover>=nums.length-1)break;
            }
        }
        return count;
    }
}

七、K次取反后最大化的数组和

1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int sum=0;
        for(int i=0;i<nums.length&&k>0;i++){
            if(nums[i]<0){//找到排序后小于0的值,将它们改为相反数
                nums[i]=-nums[i];
                k--;
            }
        }
        if(k%2==1){//若k依旧大于0,且k为奇数,将最小值变为它的相反数
            Arrays.sort(nums);
            nums[0]=-nums[0];
        }
        for(int num:nums)sum+=num;//求和
        return sum;
    }
}

八、加油站

134. 加油站 - 力扣(LeetCode)

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int curSum=0;
        int totalsum=0;
        int start=0;
        for(int i=0;i<gas.length;i++){
            curSum+=gas[i]-cost[i];
            totalsum+=gas[i]-cost[i];
            if(curSum<0){//curSum<0,说明[0,i]不能作为起点,否则会断油
                start=i+1;
                curSum=0;
            }
        }
        if(totalsum<0)return -1;
        return start;
    }
}

九、分发糖果

135. 分发糖果 - 力扣(LeetCode)

class Solution {
    public int candy(int[] ratings) {
        int[] candy=new int[ratings.length];
        candy[0]=1;
        for(int i=1;i<ratings.length;i++){
            if(ratings[i]>ratings[i-1])candy[i]=candy[i-1]+1;
            else candy[i]=1;
        }
        for(int i=ratings.length-1;i>0;i--){
            if(ratings[i-1]>ratings[i])candy[i-1]=Math.max(candy[i-1],candy[i]+1);
        }
        int sum=0;
        for(int i:candy)sum+=i;
        return sum;
    }
}

十、柠檬水找零

860. 柠檬水找零 - 力扣(LeetCode)

class Solution {
    public boolean lemonadeChange(int[] bills) {
        int five=0,ten=0,twenty=0;
        for(int bill:bills){
            if(bill==5)five++;
            if(bill==10){
                if(five<=0)return false;
                five--;
                ten++;
            }
            if(bill==20){
                if(five>0&&ten>0){
                    five--;
                    ten--;
                    twenty++;
                }else if(five>=3){
                    five-=3;
                    twenty++;
                }else return false;
            }
        }
        return true;
    }
}

十一、根据身高重建队列

406. 根据身高重建队列 - 力扣(LeetCode)

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(a,b)->{
            if(a[0]==b[0])return a[1]-b[1];//体重相等则按k值排序,k小在前
            return b[0]-a[0];//按体重降序排列
        });
        LinkedList<int[]> res=new LinkedList<>();
        for(int[] i:people)res.add(i[1],i);
        return res.toArray(new int[people.length][]);
    }
}
/*
举例解释:[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
排序后:[[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]]
结果集:     i    i[1]    res
            0     0      [7,0]
            1     1      [7,0],[7,1]
            2     1      [7,0],[6,1],[7,1]
            3     0      [5,0],[7,0],[6,1],[7,1]
            4     2      [5,0],[7,0],[5,2],[6,1],[7,1]
            5     4      [5,0],[7,0],[5,2],[6,1],[4,4],[7,1]
*/

/*

逆序排序
Arrays.sort(num,new Comparator<Integer>(){
	public int compare(Integer a, Integer b){
	    return b-a;
	}
});

*/

十二、用最少数量的箭引爆气球

452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

class Solution {
    public int findMinArrowShots(int[][] points) {
        Arrays.sort(points,(a,b)->Integer.compare(a[0],b[0]));
        int count=1;
        for(int i=1;i<points.length;i++){
            if(points[i][0]>points[i-1][1])count++;
            else points[i][1]=Math.min(points[i][1],points[i-1][1]);
        }
        return count;
    }
}

十三、无重叠区间

435. 无重叠区间 - 力扣(LeetCode)

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));
        int count=1;
        for(int i=1;i<intervals.length;i++){
            if(intervals[i][0]>=intervals[i-1][1])count++;
            else intervals[i][1]=Math.min(intervals[i][1],intervals[i-1][1]);
        }
        return intervals.length-count;
    }
}

十四、划分字母区间

763. 划分字母区间 - 力扣(LeetCode)

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> res=new ArrayList<>();
        int[] index=new int[27];
        char[] chars=s.toCharArray();
        for(int i=0;i<chars.length;i++)index[chars[i]-'a']=i;
        int left=0;
        int right=0;
        for(int i=0;i<chars.length;i++){
            right=Math.max(right,index[chars[i]-'a']);
            if(right==i){
                res.add(right-left+1);
                left=i+1;
            }
        }
        return res;
    }
}

十五、合并区间

56. 合并区间 - 力扣(LeetCode)

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res=new ArrayList<>();
        Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));//按左边界排序
        int left=intervals[0][0];
        int right=intervals[0][1];
        for(int i=1;i<intervals.length;i++){
            if(intervals[i][0]>right){
                res.add(new int[]{left,right});
                left=intervals[i][0];
                right=intervals[i][1];
            }else right=Math.max(right,intervals[i][1]);
        }
        res.add(new int[]{left,right});
        return res.toArray(new int[res.size()][]);
    }
}

十六、单调递增的数字

738. 单调递增的数字 - 力扣(LeetCode)

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String str=String.valueOf(n);
        char[] s=str.toCharArray();
        int flag=s.length;
        for(int i=s.length-1;i>0;i--){
            if(s[i-1]>s[i]){
                flag=i;
                s[i-1]--;
            }
        }
        for(int i=flag;i<s.length;i++)s[i]='9';
        return Integer.parseInt(String.valueOf(s));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2392933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于本地化大模型的智能编程助手全栈实践:从模型部署到IDE深度集成学习心得

近年来&#xff0c;随着ChatGPT、Copilot等AI编程工具的爆发式增长&#xff0c;开发者生产力获得了前所未有的提升。然而&#xff0c;云服务的延迟、隐私顾虑及API调用成本促使我探索一种更自主可控的方案&#xff1a;基于开源大模型构建本地化智能编程助手。本文将分享我构建本…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.8 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.8 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 (a) dataframe<-data.frame( Lightc(580,568…

引领机器人交互未来!MANUS数据手套解锁精准手部追踪

MANUS数据手套为机器人技术带来高精度手部追踪&#xff0c;助力实现人与机器的自然交互&#xff01;近年&#xff0c;越来越多客户希望利用这项技术精准操控机械臂、灵巧手和人形机器人&#xff0c;不断提升设备的智能化水平和交互体验。 MANUS数据手套是高精度人机交互设备&am…

源的企业级网络安全检测工具Prism X(棱镜X)

Prism X&#xff08;棱镜X&#xff09;是由yqcs团队自主研发的开源网络安全检测解决方案&#xff0c;专注于企业级风险自动化识别与漏洞智能探测。该工具采用轻量化架构与跨平台设计&#xff0c;全面兼容Windows、Linux及macOS操作系统&#xff0c;集成资产发现、指纹鉴别、弱口…

基于FPGA的二叉决策树cart算法verilog实现,训练环节采用MATLAB仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) MATLAB训练结果 上述决策树判决条件&#xff1a; 分类的决策树1 if x21<17191.5 then node 2 elseif x21>17191…

权限分配不合理如何影响企业运营?

“我们明明只给了她CRM的查看权限&#xff0c;怎么客户数据被删了&#xff1f;” “新员工入职三天了&#xff0c;HR系统权限还没开通&#xff0c;流程完全卡住&#xff01;” “上个月刚给项目经理配了财务权限&#xff0c;怎么又出乱子了&#xff1f;” 这些对话是否在你的…

ES分词搜索

ES的使用 前言作者使用的版本作者需求 简介ES简略介绍ik分词器简介 使用es的直接简单使用es的查询 es在java中使用备注说明 前言 作者使用的版本 es: 7.17.27spring-boot-starter-data-elasticsearch: 7.14.2 作者需求 作者接到一个业务需求&#xff0c;我们系统有份数据被…

【数据库】并发控制

并发控制 在数据库系统&#xff0c;经常需要多个用户同时使用。同一时间并发的事务可达数百个&#xff0c;这就是并发引入的必要性。 常见的并发系统有三种&#xff1a; 串行事务执行&#xff08;X&#xff09;&#xff0c;每个时刻只有一个事务运行&#xff0c;不能充分利用…

Ansys Zemax | 手机镜头设计 - 第 2 部分:光机械封装

本文该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;涵盖了从概念、设计到制造和结构变形的分析。本文是四部分系列的第二部分&#xff0c;介绍了在 Ansys Speos 环境中编辑光学元件以及在整合机械组件后分析系统。案例研究对象是一家全球运营制造商的智能手机镜头系统…

mcp-go v0.30.0重磅发布!Server端流式HTTP传输、OAuth支持及多项功能革新全面解读!

随着云原生应用和现代分布式系统需求的不断增长&#xff0c;高效、灵活且稳定的通信协议和客户端交互框架成为开发者关注的焦点。作为开源领域备受期待的项目之一&#xff0c;mcp-go再次迎来重要版本更新——v0.30.0正式发布&#xff01;本次更新版本不仅实现了众多关键功能&am…

OpenGL Chan视频学习-10 Dealing with Errors in OpenGL

bilibili视频链接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站&#xff1a; docs.gl 说明&#xff1a; 1.之后就不再单独整理网站具体函数了&#xff0c;网站直接翻译会…

美团启动618大促,线上消费节被即时零售传导到线下了?

首先&#xff0c;从市场推广与消费者吸引的角度来看&#xff0c;美团通过联合众多品牌开展大规模促销活动&#xff0c;并发放高额优惠券包&#xff0c;旨在吸引更多消费者参与购物。这种策略有助于提高平台的活跃度和交易量&#xff0c;同时也能够增强用户粘性。对于消费者而言…

搭建 Select 三级联动架构-东方仙盟插件开发 JavaScript ——仙盟创梦IDE

三级级联开卡必要性 在 “东方仙盟” 相关插件开发中&#xff0c;使用原生 HTML 和 JavaScript 实现三级联动选择&#xff08;如村庄 - 建筑 - 单元的选择&#xff09;有以下好处和意义&#xff0c;学校管理&#xff1a; 对游戏体验的提升 增强交互性&#xff1a;玩家能够通…

服务器如何配置防火墙管理端口访问?

配置服务器防火墙来管理端口访问&#xff0c;是保障云服务器安全的核心步骤。下面我将根据你使用的不同操作系统&#xff08;Linux: Ubuntu/Debian/CentOS&#xff1b;Windows Server&#xff09;介绍常用防火墙配置方法。 ✅ 一、Linux 防火墙配置&#xff08;UFW / firewalld…

Spring Boot+Activiti7入坑指南初阶版

介绍  Activiti 是一个轻量级工作流程和业务流程管理 (BPM) 平台,面向业务人员、开发人员和系统管理员。其核心是一个超快且坚如磐石的 Java BPMN 2 流程引擎。它是开源的,并根据 Apache 许可证分发。Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。它与 Spri…

如何在 Odoo 18 中创建 PDF 报告

如何在 Odoo 18 中创建 PDF 报告 Qweb 是 Odoo 强大的模板引擎&#xff0c;旨在轻松将 XML 数据转换为 HTML 文档。其功能特性包括基于属性的自定义、条件逻辑、动态内容插入及多样化的报告模板选项。这种多功能性使 Qweb 成为制作个性化、视觉吸引力强的报告、电子邮件和文档…

【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用

【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用 文章目录 前言正文配置环境下载源码配置环境变量测试运行修改点说明实际运行情况 参考 前言 本文用来记录 xCoreSDK-Python的调用使用1。 正文 配置环境 配置开发环境&#xff0c;这里使用conda做python环境管理&…

VLC-QT 网页播放RTSP

先看效果图,代码在文章末尾,包含源码,vlc-qt完整的库 环境说明:VS 2017 QTQt5.13.0 MSVC2017 32位 将vlc_install 目录下的bin,include,lib里所有的东西分别放在qt目录下 bin -> C:\Qt\Qt5.13.0\5.13.0\msvc2017\bin include->C:\Qt\Qt5.13.0\5.13.0\msvc201…

【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix

【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix 文章目录 【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix一、资料准备1.去畸变影像2.相机文件3.外方位元素二、创建工程1.新建工程2.导入照片3.编辑相机文件4.编辑外方位元素文件,导入外方位元…

创建型设计模式之Prototype(原型)

创建型设计模式之Prototype&#xff08;原型&#xff09; 摘要&#xff1a; Prototype&#xff08;原型&#xff09;设计模式通过复制现有对象来创建新对象&#xff0c;避免重复初始化操作。该模式包含Prototype接口声明克隆方法、ConcretePrototype实现具体克隆逻辑&#xff…