力扣爆刷第146天之贪心算法五连刷

力扣爆刷第146天之贪心算法五连刷

文章目录

      • 力扣爆刷第146天之贪心算法五连刷
      • 总结
      • 一、455. 分发饼干
      • 二、376. 摆动序列
      • 三、53. 最大子数组和
      • 四、122. 买卖股票的最佳时机 II
      • 五、5. 跳跃游戏

总结

贪心算法的本质就是选择每一阶段的局部最优,从而达到全局最优。

一、455. 分发饼干

题目链接:https://leetcode.cn/problems/assign-cookies/description/
思路:求满足最多的饼干数量,即每个孩子需要吃的数量必须被饼干覆盖,要想达到最多,只需要给孩子和饼干分别排序,然后逐个比较大小,满足需求即计数。

class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count = 0, i = 0, j = 0;while(i < g.length && j < s.length) {if(g[i] <= s[j]) {count++;i++;}j++;}return count;}
}

二、376. 摆动序列

题目链接:https://leetcode.cn/problems/wiggle-subsequence/description/
思路:求最长摆动序列,可以发现,本题是可能出现相邻状态一致的情况,简化来看,就是需要从头到尾比较相邻元素差的正负情况,如果差的情况一样,跳过即可,这样剩下的就都是相邻差不一致的了,只不过启动需要做一下处理。
下图为: true、false、true、true、true、false、false、true、false,只需要跳过相邻一致的情况,即可。
在这里插入图片描述

class Solution {public int wiggleMaxLength(int[] nums) {if(nums.length == 1) return 1;int count = 1;boolean flag = true, pro = false;for(int i = 1; i < nums.length; i++) {if(nums[i] == nums[i-1]) continue;boolean cur = nums[i] - nums[i-1] > 0;if(flag) {pro = !cur;flag = false;}if(pro != cur) {count++;pro = cur;}}return count;}
}

三、53. 最大子数组和

题目链接:https://leetcode.cn/problems/maximum-subarray/description/
思路:求最大子数组和,是连续子数组,可以使用动态规划,也可以使用贪心,下面分别展示。
动态规划:定义dp[i]表示以nums[i]为结尾的最大子数组和,既然是以nums[i]为结尾,那么要求累加和必须要大于nums[i],如果小于nums[i]则直接以nums[i]为起点,也是结尾,新开累加计算。
贪心是类似,基本思路就是记录累加和,但只要当前值小于0就重新计算。

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

贪心:

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

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

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/
思路:本题可以使用动态规划也可以使用贪心。
动态规划:定义每一天有两种状态,即持有与不持有,如果持有分为当天持有和之前就已经持有,如果不持有分为当天就不持有和之前就已经不持有。然后根据状态进行选择。

class Solution {public int maxProfit(int[] prices) {int[] dp = new int[2];dp[0] = -prices[0];for(int i = 1; i < prices.length; i++) {dp[0] = Math.max(dp[0], dp[1]-prices[i]);dp[1] = Math.max(dp[1], dp[0]+prices[i]);} return dp[1];}
}

贪心:因为买卖股票是相邻两天的差值,那为了利益最大化,自然是只要差值大于0就累加,差值小于0就不加,即不交易。

class Solution {public int maxProfit(int[] prices) {if(prices.length == 1) return 0;int sum = 0;for(int i = 1; i < prices.length; i++) {int t = prices[i] - prices[i-1];if(t > 0) {sum += t;}}return sum;}
}

五、5. 跳跃游戏

题目链接:https://leetcode.cn/problems/jump-game/description/
思路:跳跃游戏,其实就是一个右边界的扩大过程,如果向右行进超过了右边界即无法跳跃,如果一直为于右边界内,且遍历结束,右边界大于数组结尾,即可以跳跃成功。

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

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

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

相关文章

Day27

Day27 反射案例 案例一&#xff1a;万能数组扩容 注意&#xff1a;copyOf、toString public class Test01 {/*** 知识点&#xff1a;反射案例 之 万能数组扩容* * 注意&#xff1a;copyOf、toString*/public static void main(String[] args) {String[] ss {"aaa"…

【入门】使用sklearn实现的KNN算法:鸢尾花数据集分类预测

目录 前言 第一步&#xff1a;安装和导入sklean模块 第二步&#xff1a;获取数据 第二步&#xff1a;分割出训练集和测试集 第三步&#xff1a;训练模型 第四步&#xff1a;测试结果 总结 前言 本文将介绍如何利用K最近邻&#xff08;KNN&#xff09;算法对经典的鸢尾花数…

关于网络的基础知识

大家好&#xff0c;在当今数字时代&#xff0c;网络已经成为我们生活中不可或缺的一部分&#xff0c;它连接着世界的每一个角落&#xff0c;让信息、资源和人们彼此之间无阻碍地交流和共享。然而&#xff0c;对于许多人来说&#xff0c;网络仍然是一个神秘而复杂的领域&#xf…

Linux基础指令用户管理003

继Linux基础指令002我们讲了如何设置用户密码以及修改用户信息&#xff0c;我们讲一下高级用户管理。 操作系统 CentOS Stream 9 高级用户管理 visudo 用于普通用户临时提升权限执行命令&#xff0c;如下图 [yylocalhost ~]$ cp -av /etc/passwd{,_bak} /etc/passwd ->…

数据分析必备:一步步教你如何用Pandas做数据分析(11)

1、Pandas 自定义选项 Pandas 自定义选项操作实例 Pandas因为提供了API来自定义行为&#xff0c;所以被广泛使用。 自定义API中有五个相关功如下&#xff1a; get_option() set_option() reset_option() describe_option() option_context() 下面我们一起了解下这些方法。 1.…

【leetcode--删除有序数组中的重复项I + II】

删除有序数组中的重复项I 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 思路&#xff1a;双指…

STM32_HAL_低功耗的模式

低功耗的模式 运行模式&#xff08;Run Mode&#xff09;&#xff1a;这是正常工作模式&#xff0c;所有的系统功能都是可用的。 睡眠模式&#xff08;Sleep Mode&#xff09;&#xff1a;在CPU停止运行时&#xff0c;所有的外设和内存仍然处于供电状态。此模式下&#xff0c;…

卓豪Zoho CRM客户管理系统采购费用?

企业如何高效地管理客户关系&#xff0c;卓豪Zoho CRM&#xff0c;作为一款领先的客户关系管理系统&#xff0c;不仅为企业提供了一套完整的客户管理解决方案&#xff0c;更在价格上实现了公开透明和合理优惠&#xff0c;助力企业实现数字化转型&#xff0c;迈向更高效、更智能…

前端 CSS 经典:filter 滤镜

前言&#xff1a;什么叫滤镜呢&#xff0c;就是把元素里的像素点通过一套算法转换成新的像素点&#xff0c;这就叫滤镜。而算法有 drop-shadow、blur、contrast、grayscale、hue-rotate 等。我们可以通过这些算法实现一些常见的 css 样式。 1. drop-shadow 图片阴影 可以用来…

电压、电流、功率

//**********************************************************************************// 380V电压 额定功率1.732*额定电压*额定电流*功率因素 220V电压 额定功率额定电压*额定电流*功率因素 单相&#xff0c;功率1KW&#xff0c;电流约4.5A。 三相&#xff0c;功率1KW…

使用Java Swing制作一个飞翔的小鸟游戏

文章目录 一、需求分析二、技术介绍2.1相关技术2.2开发环境 三、功能实现1、开始2、运动3、死亡 四、部分代码实现获取源码 文章最下方获取源码&#xff01;&#xff01;&#xff01; 文章最下方获取源码&#xff01;&#xff01;&#xff01; 文章最下方获取源码&#xff01;&…

基于Vue的神影视频APP

需求说明:使用Vue脚手架进行搭建,页面简洁、精致,和一些常见的电影网站类似,例如支付宝中的“淘票票电影”。在项目中使用页面布局技术(表格,vue.js框架,DIV+CSS或者混合使用)进行页面设计,使网站功能齐全,界面美观大方,有一定的交互性。 功能分析:系统主要分为七…

十大排序算法【1】---冒泡排序、快速排序、选择排序、插入排序、希尔排序

动画演示 各种算法&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 6种常见排序算法&#xff1a;https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html 1、冒泡排序 //1、冒泡排序Bubble Sort: 比较前后相邻的数据&#xff0c…

消消乐游戏开发,三消游戏,消除小游戏

消消乐是一款非常受欢迎的休闲消除类游戏&#xff0c;通常也被称为“三消游戏”。这类游戏的主要目标是通过交换和匹配三个或更多相同的物品来清除它们&#xff0c;从而得分并通过关卡。以下是一些消消乐游戏的基本特点和玩法&#xff1a; 基本玩法 交换和匹配&#xff1a;玩…

MySQL第六次作业

一、创建部门表 指令&#xff1a; mysql> CREATE TABLE dept (-> dept_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 部门编号,-> dept_name CHAR(20) COMMENT 部门名称-> ); 演示&#xff1a; 二、插入部门数据 指令&#xff1a; mysql> INSERT INTO dept…

去中心化的 S3,CESS 首创去中心化对象存储 DeOSS

Web3 在各个领域的应用和发展已成为讨论的焦点&#xff0c;尽管行业对 Web3 的定义各不相同&#xff0c;但一个普遍的共识是 Web3 赋予了用户对其数据的所有权和自主权。这一转变在我们的生活和工作与数字化越来越深入地融合之际至关重要&#xff0c;这意味着所有人类活动很快将…

ESP8266连接巴法云

AT &#xff1a;测试是否能用 ATCWMODE1 :设置为无线终端模式 ATCWJAP"XXX","XXXXXXXXXX" :ESP8266加入热点网络&#xff0c;热点信息必须是2.4G ATCIPSTARTATCIPSTART"TCP","bemfa.com",8344 &…

Python解析网页-XPath

目录 1、什么是XPath 2、安装配置 3、XPath常用规则 4、快速入门 5、浏览器XPath工具 1.什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。 它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标…

SQL面试题练习 —— 连续支付订单合并

目录 1 题目2 建表语句3 题解 1 题目 现有一张用户支付表&#xff1a;t_user_pay 包含字段订单ID&#xff0c;用户ID&#xff0c;商户ID&#xff0c;支付时间&#xff0c;支付金额。 如果同一用户在同一商户存在多笔订单&#xff0c;且中间该用户没有其他商户的支付记录&#…

Python小游戏——打砖块

文章目录 打砖块游戏项目介绍及实现项目介绍环境配置代码设计思路代码设计详细过程 难点分析源代码代码效果 打砖块游戏项目介绍及实现 项目介绍 打砖块游戏是一款经典的街机游戏&#xff0c;通过控制挡板来反弹小球打碎屏幕上的砖块。该项目使用Python语言和Pygame库进行实现…