代码随想录算法训练营第三十三天|452. 用最少数量的箭引爆气球、 435. 无重叠区间、 763.划分字母区间

news2024/12/26 23:49:57

452. 用最少数量的箭引爆气球

在这里插入图片描述

题目链接:452. 用最少数量的箭引爆气球
文档讲解:代码随想录
状态:没想出来

思路:对气球终点位置排序,从第一个气球终点位置射出箭,看这支箭可以尽可能穿过几个气球,如果遇到一个气球的起点在当前箭的终点之后,说明当前这支箭不能再穿过这个气球了,需要再射出一支新的箭,并将新的箭的终点设为当前气球的终点。

题解:

        // 按照气球的结束位置进行排序
        Arrays.sort(points, Comparator.comparingInt(a -> a[1]));

        // 初始化箭的数量为1,因为至少需要一支箭
        int arrNum = 1;
        // 初始化第一支箭的位置为第一个气球的结束位置
        int end = points[0][1];

        // 遍历所有气球
        for (int[] point : points) {
            // 如果当前气球的开始位置大于箭的结束位置,说明需要新的箭
            if (point[0] > end) {
                arrNum++; // 增加箭的数量
                end = point[1]; // 更新箭的位置为当前气球的结束位置
            }
        }

        // 返回所需的箭的数量
        return arrNum;

435. 无重叠区间

在这里插入图片描述

题目链接:435. 无重叠区间
文档讲解:代码随想录
状态:还行

思路:先固定一边排序,然后考虑上个区间终点和当前区间的起点关系。

题解:

    //起点排序
    public int eraseOverlapIntervals1(int[][] intervals) {
        // 按照区间的起始位置进行排序
        Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));

        // 记录需要移除的重叠区间数量
        int remove = 0;

        // 记录当前处理的区间的结束位置
        int pre = intervals[0][1];

        // 从第二个区间开始遍历
        for (int i = 1; i < intervals.length; i++) {
            // 如果当前区间的起始位置小于前一个区间的结束位置,
            // 表示当前区间与前一个区间重叠
            if (pre > intervals[i][0]) {
                // 需要移除当前区间
                remove++;
                // 更新当前处理的区间的结束位置为当前区间结束位置和前一个区间结束位置的较小值
                pre = Math.min(pre, intervals[i][1]);
            } else {
                // 如果当前区间与前一个区间不重叠,更新当前处理的区间的结束位置为当前区间的结束位置
                pre = intervals[i][1];
            }
        }

        // 返回需要移除的重叠区间数量
        return remove;
    }

    //终点排序,(推荐)
    public int eraseOverlapIntervals(int[][] intervals) {
        // 根据区间的终点进行排序
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[1], b[1]));

        int res = -1; // 初始化结果为 -1,因为第一个区间即使重叠也不算在移除计数中
        int end = intervals[0][1]; // 初始化end为第一个区间的终点

        // 遍历所有区间
        for (int[] interval : intervals) {
            if (interval[0] < end) { // 当前区间与前一个区间重叠
                res++; // 增加移除重叠区间的计数
            } else { // 当前区间不重叠
                end = interval[1]; // 更新end为当前区间的终点
                // end = Math.min(end, interval[1]); //因为是对终点进行排序的interval[1]肯定大于或等于 end,所以不需要这个,如果是对起点排序则不能少               
            }
        }

        return res; // 返回移除重叠区间的数量
    }

类似重叠区间问题解题模板:

  1. 排序:根据问题需求,通常推荐对区间的终点进行排序。
  2. 考虑上个区间的终点和当前区间的起点的关系:这是判断区间是否重叠的关键。
  3. 根据题意求解:根据具体问题的要求来计算结果,例如计算需要移除的区间数量,找到最多数量的无重叠区间等。

763.划分字母区间

在这里插入图片描述

题目链接:763.划分字母区间
文档讲解:代码随想录
状态:把问题想复杂了,写了一个划分片段最少的版本出来了。。。。

思路:

  1. 统计每一个字符最后出现的位置。
  2. 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点。

题解:

    public List<Integer> partitionLabels(String s) {
        List<Integer> res = new ArrayList<>(); // 结果列表,用于存放每个片段的长度
        char[] chars = s.toCharArray(); // 将输入的字符串转换为字符数组,便于处理
        int[] counter = new int[26]; // 记录每个字符最后出现的位置
        for (int i = 0; i < chars.length; i++) {
            counter[chars[i] - 'a'] = i; // 更新字符对应的最后出现位置
        }

        int far = -1; // 当前片段的最远位置
        int start = 0; // 当前片段的起始位置
        for (int i = 0; i < chars.length; i++) {
            far = Math.max(far, counter[chars[i] - 'a']); // 更新当前片段的最远位置
            if (i == far) { // 如果当前位置是当前片段的结束位置
                res.add(i - start + 1); // 将当前片段的长度添加到结果列表中
                start = i + 1; // 更新下一个片段的起始位置
            }
        }

        return res; // 返回结果列表
    }

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

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

相关文章

Snowflake 外部表的最新增强功能:您需要了解的内容

自从我们上一篇关于如何使用 MinIO 扩展 Snowflake 实现的博客文章以来&#xff0c;Snowflake 对外部表的支持已经发生了重大更新。外部表允许 Snowflake 用户将对象存储&#xff08;如 MinIO&#xff09;中的数据视为 Snowflake 中的只读表&#xff0c;而无需迁移。Snowflake …

制造业工厂急需一套erp系统帮他降本增效

随着全球制造业竞争的日益激烈&#xff0c;制造业工厂面临着越来越多的挑战&#xff0c;包括成本控制、生产效率、市场响应速度等方面。在这样的背景下&#xff0c;一套高效的ERP&#xff08;企业资源规划&#xff09;系统成为了制造业工厂降本增效的必备工具。本文将探讨ERP系…

视频融合共享平台LntonCVS视频监控平台在农场果园等场景的使用方案

我国大江南北遍布着各类果园。传统的安全防范方式主要是建立围墙&#xff0c;但这种方式难以彻底阻挡不法分子的入侵和破坏。因此&#xff0c;需要一套先进、科学、实用且稳定的安全防范报警系统&#xff0c;以及时发现并处理潜在问题。 需求分析 由于果园地处偏远且缺乏有效防…

【每日刷题】Day74

【每日刷题】Day74 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1394. 找出数组中的幸运数 - 力扣&#xff08;LeetCode&#xff09; 2. 1518. 换水问题 - 力扣&…

solidworks安装教程 - 解决安装后服务不能自动启动问题

Solidworks安装教程&#xff0c;有些同学的电脑过于复杂&#xff0c;产生了正常的服务不能启动。 前面的有个重要的操作操作界面有&#xff0c;大家应该是执行了&#xff1a; 那么我们有变通的方法可以让这个服务启动&#xff1a; 1. cmd用管理员启动 2. 测试下如下命令是否…

2024年在WordPress中创建销售活动的入门级优惠券方法

2024年在WordPress中创建销售活动的入门级优惠券方法 今天我想和大家分享一些关于如何在WordPress网站上创建销售活动的经验。无论你是电商新手还是已经有一定经验的店主&#xff0c;优惠券都是吸引顾客、增加销量的有力工具。在这篇文章中&#xff0c;我将介绍三款适合初学者…

【工具类的编写】

编写工具类 最近在写一个C的项目&#xff0c;发现编写项目的过程真是曲折&#xff0c;所以写通过博客方式来对本项目进行一个重新的梳理。以便于自己来更好的了解这个项目。 1. 时间类的编写 我们都知道在C中获取时间戳很简单&#xff0c;但是怎么把一个时间戳转换为我们平时…

Docker编译nanopc-t4源码流程介绍

官方文档 Android系统编译 vnc加环境变量配置 https://github.com/friendlyarm/docker-cross-compiler-novnc 下载 git clone https://github.com/friendlyarm/docker-ubuntu-lxde-novnc cd docker-ubuntu-lxde-novnc docker build --no-cache -t docker-ubuntu-lxde-novnc …

Web 应用开源项目大全

Web 应用开源项目大全结合巴比达内网穿透实现WEB公开访问。 下面是一个Web应用的开源列表。没什么可说的&#xff0c;太疯狂了。尤其是Web 2.0那一堆。我不知道你怎么想&#xff0c;有些开源项目的源码写得挺不好的&#xff0c;尤其是性能方面。或许你会以为改一改他们就可以成…

《知人寻香—2024香水香氛趋势白皮书》

本报告由小红书联合凯度中国共同发布:《知人寻香—2024香水香氛趋势白皮书》。这份报告细致描绘了中国香水市场的五大消费人群特征和六大消费趋势,为香水品牌提供了丰富的创新灵感。它不仅分析了中国香水市场目前的发展趋势,还预测了未来市场的潜在增长,以及消费者对香水香氛产…

el-form-item的label设置两端对齐

<style scoped> ::v-deep .el-form-item__label {display: inline;text-align-last: justify; } </style>效果如图所示

人工ai智能写作,分享推荐三款好用软件!

在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;而在内容创作领域&#xff0c;AI智能写作软件更是如雨后春笋般涌现。今天&#xff0c;就为大家分享三款备受好评的AI智能写作软件&#xff0c;让你轻松掌握高效写作的秘密…

如何使用Python和PaddleOCR轻松识别图片中的文字

在这个数字化时代&#xff0c;文本识别技术变得越来越重要&#xff0c;它广泛应用于文档自动化处理、内容审核、智能交互等场景。本文将引导你如何使用Python结合PaddleOCR库&#xff0c;轻松实现图片中的文字识别功能。 必备工具包安装 在开始编写代码之前&#xff0c;你需要…

Django教程(001):安装及快速上手

1.1 Django安装 pip install django安装之后 c:\python39-python.exe-Scripts-pip.exe-django-admin.exe【安装django之后&#xff0c;工具&#xff0c;创建django项目】-Lib-内置模块-site-packages-flask-django(安装django之后&#xff0c;【django框架源码】)如下图&…

仓库专用高压弓静音版驱鸟器详解

仓库不仅仅储存着各式各样的物品&#xff0c;还可能成为野生鸟类的栖息地。鸟类可能会在仓库内寻找食物&#xff0c;例如小型虫子和昆虫&#xff0c;或残留的食物。它们的觅食行为不仅可能污染货物&#xff0c;还可能对仓库的设施和结构造成损害。 采取有效的驱鸟措施&#xff…

有什么能和ai聊天的软件?5个软件教你快速和ai进行聊天

有什么能和ai聊天的软件&#xff1f;5个软件教你快速和ai进行聊天 当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术已经逐渐渗透到我们的日常生活中&#xff0c;而与AI进行聊天也成为了一种趋势和乐趣。以下是五款可以和AI进行聊天的软件&#xff0c;它们提…

ai智能写作一键生成的软件盘点,4款宝藏!

在信息爆炸的时代&#xff0c;内容创作已成为各行各业的刚需。然而&#xff0c;对于许多创作者来说&#xff0c;如何高效、高质量地输出内容却是一个不小的挑战。幸运的是&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI智能写作软件应运而生&#xff0c;它们凭借一键生…

酒壮怂人胆 男子酒后疯狂踹门被拘

&#xff08;通讯员&#xff1a;高园&#xff09;俗话说&#xff0c;小酒怡情&#xff0c;酗酒伤身。许多人在下班后都喜欢“喝两杯”&#xff0c;可一旦醉意上头&#xff0c;可就各有各表现了。有的人困意袭来&#xff0c;呼呼大睡&#xff1b;有的人失去理智&#xff0c;疯狂…

oracle报错-ORA-12638:身份证明检索失败

navicat16连接本地oracle数据库成功后&#xff0c;连接远程数据库&#xff0c;同样是oracle11g&#xff0c;确认网络、用户名、密码都没问题的情况下&#xff0c;报错ora-12638。 解决方法&#xff1a; 这是由于Oracle的认证方式使用了本地操作系统认证&#xff08;NTS&#x…

图像处理Python库--图片裁剪、缩放、灰度图、圆角等

图像处理Python库 py-img-processor1. 安装2. 使用(Usage)2.1 运行配置2.2 图像处理处理函数图像处理参数为字符串图像处理参数为JSON 命令行提取图像主色调 py-img-processor Image editor using Python and Pillow. 依赖Pillow开发的Python库&#xff0c;用于图像编辑处理。…