当前位置: 首页 > news >正文

力扣面试经典150题,第7(lc121),8(lc122),9(lc55),10(lc45)题

文章目录

  • 一、lc121 买卖股票的最佳时机
    • 双指针
    • 单指针
  • 二、lc122 买卖股票的最佳时机2
  • 三.lc55 跳跃游戏
  • 四.lc45 跳跃游戏2
  • 贪心与动规小总结


一、lc121 买卖股票的最佳时机

双指针

按题目要求,低价买,高价卖,买必须在卖前,使用快慢指针,快指针遍历数组,慢指针保存哪一天买,快指针每遍历一个元素就与慢指针表示的元素进行比较,快小就替换,快大就计算获利并与之前的获利比较取max

class Solution {public int maxProfit(int[] prices) {int ans=0;int t=0;for(int i = 1; i<prices.length;i++){if(prices[i]<prices[t]){t=i;}else{ans=Math.max(prices[i]-prices[t],ans);}}return ans;}
}

单指针

还是遍历数组,在第i天卖,只能在0 ~ i-1天买入,先计算获利(即p-minPrice),再计算minPrice

class Solution {public int maxProfit(int[] prices) {int ans = 0;int minPrice = prices[0];for (int p : prices) {ans = Math.max(ans, p - minPrice);minPrice = Math.min(minPrice, p);}return ans;}
}

二、lc122 买卖股票的最佳时机2

典型的动态规划问题,第i天的状态可以由第i-1天的状态递推出来,具体的状态转移见下图截图来自灵神讲解视频
在这里插入图片描述
讲解视频地址

class Solution {public int maxProfit(int[] prices) {int n=prices.length;int[][] dp = new int[n][2];dp[0][0] = 0;	//第一天结束时不持有股票收益dp[0][1] = -prices[0];	//第一天结束时持有股票收益for(int i=1;i<n;i++){//遍历并递推每一个状态dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);dp[i][1] =Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);}return dp[n-1][0];	//肯定为最后一天不持有股票收益更高}
}

三.lc55 跳跃游戏

使用贪心算法,遍历整个数组,算出每个点可到达的最远距离并取最大值,如果最大值大于等于最后一个下标,返回true,否则返回false。循环退出判断要加i<ma(遇到样例2的情况,无论如何都跳不过下标3)

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

四.lc45 跳跃游戏2

还是贪心算法,题解来自灵神,搭桥法,在前方无路可走的情况下,搭一座桥,更新此时可到达的最远距离cur_right,具体做法为遍历数组,更新下一座桥能到达的最远距离next_right,如果到了已建造的桥的右端点cur_right,搭一座桥ans++,更新此时能到达的最远距离cur_right

class Solution {public int jump(int[] nums) {int ans = 0;int curRight = 0; // 已建造的桥的右端点int nextRight = 0; // 下一座桥的右端点的最大值for (int i = 0; i < nums.length - 1; i++) {// 遍历的过程中,记录下一座桥的最远点nextRight = Math.max(nextRight, i + nums[i]);if (i == curRight) { // 无路可走,必须建桥curRight = nextRight; // 建桥后,最远可以到达 next_rightans++;}}return ans;}
}作者:灵茶山艾府
链接:https://leetcode.cn/problems/jump-game-ii/solutions/2926993/tu-jie-yi-zhang-tu-miao-dong-tiao-yue-yo-h2d4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

贪心与动规小总结

在做第3,4题时,首先想到的思路就是动态规划,但写不出来递推式,3,4题动规递推式样式为:dp[i]=???+nums[i],但找到i状态的前一个状态还需要额外的算法,不如直接使用贪心

http://www.dtcms.com/a/487945.html

相关文章:

  • 网页设计素材有两种分别是什么vueseo解决方案
  • LoRA微调
  • 网站建设咨询服务商上海网站推广珈维
  • 青岛cms建站系统顺德门户网站建设公司
  • 【评测】百炼大模型视频生成初体验
  • 算法---动态规划(Dynamic Programming, DP)
  • 如何建立网站会员系统吗电商网站怎么做seo
  • 西安SEO网站推广长治网站制作
  • 山东城建建设职业学院教务网站第一章 网站建设基本概述
  • 新网站多久被收录自己做的网站搜索不到
  • 算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!
  • 知名排版网站wordpress如何安裝
  • 电子商务网站设计毕业设计论文电影网站开发PPT模板
  • index.html网站怎么做wordpress关注公众号发送验证码
  • dede做的网站打不开云服务器一般多少钱
  • HTTP Error 5OO.0- ASPNET Core lIS hosting failure (in-process)
  • 机械做卖产品网站百度识图网页版
  • 公司注册网站系统东营区住房和城乡建设局网站
  • LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
  • 怎么让网站绑定域名访问不了开发软件怎么申请版权
  • 光通信网站模板百度app下载安装官方免费版
  • vllm-openai Docker 部署手册
  • 什么是网站主办者宜兴专业做网站公司
  • 微信官网网站移动电子商务平台就是手机网站
  • 建设单位网站需求报告网站页面设计代码
  • 做网站不懂行情 怎么收费想用vs做网站 学什么
  • 网站域名绑定ip微信公众号怎么做预约功能
  • 如何申请GitHub账号?
  • 创意响应式网站建设别的网站做相关链接怎么做
  • 存储引擎:数据库的核心架构与B+树的深度解析