LeetCode算法练习top100:(10)贪心算法

news/2024/7/23 23:22:14 标签: 算法, leetcode, 贪心算法
package top100.贪心算法;

import java.util.ArrayList;
import java.util.List;

public class TOP {
    //121. 买卖股票的最佳时机
    public int maxProfit(int[] prices) {
        int res = 0, min = prices[0];
        for (int i = 1; i < prices.length; i++) {
            if (prices[i] < min) {
                min = prices[i];
            }
            res = Math.max(res, prices[i] - min);
        }
        return res;
    }

    //55. 跳跃游戏
    public boolean canJump(int[] nums) {
        if (nums == null || nums.length == 0) {
            return true;
        }
        int max = 0; //每个位置可达的最大索引
        for (int i = 0; i < nums.length ; i++) {
            if (max >= i) { //保证i可达
                max = Math.max(max, nums[i] + i);
            }
        }
        return max >= nums.length - 1; //最大索引超出最后一个字符索引,则可达
    }

    //45. 跳跃游戏 II
    //贪心算法:让每次跳到最远,则跳跃次数可以最小
    //计算当前位置可以跳跃的范围,从范围里面选取一个可以跳跃的最远位置作为下一个位置
    public int jump(int[] nums) {
        int res = 0;
        int n = nums.length;
        for (int i = 0; i < n - 1;) {
            //每次跳跃选取下个阶段可以跳跃的最远值
            int maxIndex = nums[i] + i; //下个阶段可以跳跃的最大范围
            //直接跳到最后了
            if (maxIndex >= n - 1) {
                res++;
                break;
            }
            //选择下个跳跃范围内可以跳跃到的最远值
            int max = nums[i + 1] + i + 1;//下个范围跳的最远距离
            int index = i + 1; //最大数对应的位置
            for (int j = i + 2; j <= maxIndex; j++) {
                if (nums[j] + j >= max) { //如果相等,取后面一个
                    max = nums[j] + j;
                    index = j; //每次在上次能跳到的范围(end)内选择一个能跳的最远的位置(也就是能跳到max_far位置的点)作为下次的起跳点 !
                }
            }
            i = index; //跳跃到最大位置上
            res++;
        }
        return res;
    }

    //763. 划分字母区间
    //贪心算法:先根据当前字符,寻找其最大索引,在这个字串中,寻找每一个字符的最大索引,截取为一个字串
    public List<Integer> partitionLabels(String s) {
        List<Integer> res = new ArrayList<>();
        //用map记录每个字符的最大索引
        int[] map = new int[26];
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            map[chars[i] - 'a'] = i;
        }
        for (int i = 0; i < chars.length;) {
            //当前字母的最大索引
            int maxIndex = map[chars[i] - 'a'];
            //更新字串中的maxIndex
            for (int j = i + 1; j < maxIndex; j++) {
                int curMax = map[chars[j] - 'a'];
                maxIndex = Math.max(maxIndex, curMax);
            }
            //截取为字串
            res.add(maxIndex - i + 1);
            i = maxIndex + 1; //更新索引
        }
        return res;
    }
}


http://www.niftyadmin.cn/n/5272090.html

相关文章

查找书籍(缓冲区)

给定n本书的名称和定价&#xff0c;本题要求编写程序&#xff0c;查找并输出其中定价最高和最低的书的名称和定价。 输入格式: 输入第一行给出正整数n&#xff08;<10&#xff09;&#xff0c;随后给出n本书的信息。每本书在一行中给出书名&#xff0c;即长度不超过30的字…

Hive学习新天地一站式掌握Hive技能,让你成为大数据领域的佼佼者!

介绍&#xff1a;Hive是一个构建在Hadoop顶层的数据仓库工具&#xff0c;起源于Facebook为了解决海量数据的统计分析需求。它能够将结构化的数据文件映射为一张数据库表&#xff0c;并提供类似于SQL的查询功能&#xff0c;可以将SQL语句转换为MapReduce任务进行运行。 Hive的出…

LLMs 玩狼人杀:清华大学验证大模型参与复杂交流博弈游戏的能力

作者&#xff1a;彬彬 编辑&#xff1a;李宝珠&#xff0c;三羊 清华大学研究团队提出了一种用于交流游戏的框架&#xff0c;展示了大语言模型从经验中学习的能力&#xff0c;还发现大语言模型具有非预编程的策略行为&#xff0c;如信任、对抗、伪装和领导力。 近年来&#x…

AI 官网

1.ChatGPT 官网 https://chat.openai.com/ 官方 iOS版 下载&#xff1a; 【点击前往】 Google 应用商店下载&#xff1a; 【点击前往】 2.Google Bard &#xff1a; https://bard.google.com/chat 3.微软Copilot&#xff1a;【官网链接】 Microsoft Copilot: 你的日常 A…

语音机器人话术设计重点

要使用语音机器人&#xff0c;首先得要先准备一套业务的话术脚本&#xff0c;这个话术脚本的设计&#xff0c;可能直接决定了语音机器人后续的使用效果。这个脚本的编写一般不是机器人厂家直接能完成的&#xff0c;只有业务的使用方&#xff0c;他们才最了解自己的业务&#xf…

ORA-00257: 归档程序错误在释放之前仅限于内部连接

Oracle在windows服务器下异常断电或者长时间运行情况下&#xff0c;容易发生ORA-00257: 归档程序错误 “ORA-00257: 归档程序错误。在释放之前仅限于内部连接”错误由于由于归档日志占满了空间&#xff0c;此空间大小限制由参数&#xff1a;db_recovery_file_dest_size来指定…

电力在线智能监测系统

电力在线智能监测系统是一种基于物联网、云计算、大数据和人工智能等技术的智能化监控系统。电易云智慧电力物联网是以提高电力运行安全&#xff0c;降低运维成本为目标&#xff0c;采用物联网、云计算技术&#xff0c;对配电室、箱式变电站、配电箱(柜)等电力设备数字化升级&a…

【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展

背景 语义分割是将图像中的每个像素按其语义类别进行分类&#xff0c;从而实现像素级别的语义理解。其在自动驾驶、医学图像、结构损伤检测等领域有着广泛的应用。 1.主流算法架构 1.1 U-Net 论文地址&#xff1a;https://arxiv.org/abs/1505.04597 U-Net2015年由Ronneberge…