news 2026/4/25 20:55:52

小鸡玩算法-力扣HOT100-贪心算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小鸡玩算法-力扣HOT100-贪心算法

一.买卖股票的最佳时机

问题概述:

给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。

你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0

思路:

我站在每天的角度去看,总是拿历史到现在最低的价格买入,我看看今天的价格卖出,是不是比之前的历史的都要赚,如果都要赚我就卖,如果不是,我就不卖。

代码:

class Solution { public int maxProfit(int[] prices) { int minprice=Integer.MAX_VALUE; int maxProfit=0; for(int price:prices){ minprice=Math.min(price,minprice); maxProfit=Math.max(maxProfit,price-minprice); } return maxProfit; } }

二.跳跃游戏

问题概述:

给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false

思路:

01234

23114

24348

第一个数最大能跳到索引2,那索引2之前的最大数为4,那他最大再变更为4,那4>=4已经含盖了最后个索引,所以为true.

01234

32104

33334

第一个数最大能跳到索引3,那索引3之前的最大数还是3,那他跳不到4.为false

那我们就从第一个数开始遍历,每次跳1格计算当前能跳到的最远位置,当遍历的数>当前最远位置,那就没法跳了,就返回false。如果当前跳到的最远位置已经大于等于最后个位置,所以已经具备了跳到最后的能力,直接返回false。

代码最后一个return true永远不会执行,但不写会编译错误。

代码:

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

三.跳跃游戏II

问题概述:

上一题问能不能跳到最后,现在问的是能跳到最后,最少只要跳几次。(题目保证一定能跳到最后)

思路:

倒着推,从左往右找第一个能跳到最后那个索引位置记作pos1,step++。再以pos1为目标位置,从左到右找第一个能跳到pos1的下一个pos2,step++,依次类推有几个pos就是最少跳跃次数。

那可能你会有疑惑,有木有可能跳不到pos1呢,其实你可以结合上题,它是从第一个数开始遍历的,能到最后,那期间的那些数都是可以跳的,那题目保证了从0能跳到最后n,那0到n这个区间一定包括pos1,那pos1左边必有能到它的数,那有人问呢,那pos2呢,这不就是n取pos1嘛,那不也就跳的到嘛。

代码:

class Solution { public int jump(int[] nums) { int pos=nums.length-1; int step=0; while(pos>0){ for(int i=0;i<pos;i++){ if(nums[i]+i>=pos){ pos=i; step++; break; } } } return step; } }

四.划分字母区间

问题概述:

给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串"ababcc"能够被分为["abab", "cc"],但类似["aba", "bcc"]划分是非法的,因为b在两个字符串都出现了。

思路:

如果'a'出现的位置为2,8,10,那是不是包含'a'的片段一定得分割到10,那前面如果有'b',位置为3,11那是不是就又得切到11这个位置。

那我们就可以想到,先把每个字母最后的位置记录下来,一个一个位置切下去,看到哪才能断。

代码:

class Solution { public List<Integer> partitionLabels(String s) { List<Integer> res=new ArrayList<Integer>(); int start=0,end=0; int[] last=new int[26]; for(int i=0;i<s.length();i++){ last[s.charAt(i)-'a']=i; } for(int i=0;i<s.length();i++){ end=Math.max(end,last[s.charAt(i)-'a']); if(i==end){ res.add(end-start+1); start=i+1; } } return res; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 20:52:24

Cursor Pro激活器实战:3步高效破解AI编程助手限制

Cursor Pro激活器实战&#xff1a;3步高效破解AI编程助手限制 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial r…

作者头像 李华
网站建设 2026/4/25 20:33:52

从‘玩具车’到‘机械臂’:给新手讲明白PID控制为啥在机器人上不好使,以及一个简单的补救办法

从‘玩具车’到‘机械臂’&#xff1a;PID控制在机器人领域的局限与重力补偿方案 第一次用PID控制器让玩具小车沿着黑线跑起来时&#xff0c;那种成就感就像魔术师第一次成功变出鸽子。但当我把同样的代码复制到六轴机械臂项目时&#xff0c;却发现原本温顺的机械臂突然变得像醉…

作者头像 李华
网站建设 2026/4/25 20:29:38

adb调试问题集锦

1 Android adb基本知识 1.1 adbd authentication adbd authentication is introduced in 08-2012.Windows private key file: %USERPROFILE%\.android\adbkey adbd public key file: /data/misc/adb/adb_keys, from Windows %USERPROFILE%\.android\adbkey.pub, sent by USB EP…

作者头像 李华
网站建设 2026/4/25 20:22:22

3步永久保存微信聊天记录:WeChatExporter完整备份指南

3步永久保存微信聊天记录&#xff1a;WeChatExporter完整备份指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 微信聊天记录承载着我们重要的回忆和工作信息&#xff…

作者头像 李华
网站建设 2026/4/25 20:20:24

云原生入门系列|第7集:Label与Selector全网保姆级教程!搞懂K8s资源关联的核心逻辑

前言 各位云原生入门的小伙伴,欢迎继续跟进《云原生入门系列》专栏!上一集我们彻底吃透了Ingress网关的核心逻辑,搞懂了它作为K8s集群的“统一外部入口”,如何通过路由规则将外部请求转发到对应的Service,再由Service转发到后端Pod,打通了K8s外部访问的最后一道门槛。 …

作者头像 李华