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

452. 用最少数量的箭引爆气球:代码随想录

这道题目的意思就是你可以垂直的射箭,让你用最少的箭数射完所有的气球,这样其实我们可以很容易的就想到,我们尽可能的去射重叠的气球,这样我们一支箭就可以射多支,所以这里我们可以先对数组进行一个排序,就是可以先考虑到那些重叠在一起的,这题其实题目的要求跟数组元素的顺序无关,排完序后,这里我犯了一个错误就是,我的思路都是对的,就是在判断他们两个气球是不是重叠的时候,其实只要考虑右边界end和下一个气球的左边界就可以了,因为你已经排好序了,这里我将两个气球的左右边界都考虑进去了,所以就写的很复杂,在判断完之后,记得要更新右边界,来看具体的代码的实现

class Solution {
public:
    static bool cmp(pair<int, int> a, pair<int, int> b) {
        return a.first < b.first;
    }
    int findMinArrowShots(vector<vector<int>>& points) {
        int n = points.size();
        pair<int, int> nums[n];
        for (int i = 0; i < n; i++) {
            nums[i].first = points[i][0];
            nums[i].second = points[i][1];
        }
        sort(nums, nums + n, cmp);
        int result = 1; int end = nums[0].second;
        for (int i = 1; i < n; i++) {
            if (nums[i].first <= end) {
                end = min(end, nums[i].second);
            }
            else {
                result++;
                end = nums[i].second;
            }
        }
        return result;
    }
};

在这里我用了一个pair数组,其实你也可以不用,直接用vector也可以,首先就是sort排序,然后就是一开始初始化有边界right,和结果result,只要我当前遍历的这个气球的左边界小于等于我的right,就代表我们是重叠的这样就让right=我们两个右边界的最小值,这样才是判断后面的气球是不是和前面两个重叠,如果不是重叠的,那就直接将result++,然后让我的右边界等于我下一个结点的右边界,就可以了,因为此时我肯定需要另一支箭,这就是这道题目的解答,来看下一道题目

435. 无重叠区间:代码随想录

这道题目的意思就是给你很多个区间,让你求出要去除多少个区间才能保证所有的区间都是不重叠的,其实这道题目和上一道题非常的像,只要你上一道题目弄懂了,这道题稍微改一下就可以了,我们来看具体的代码的实现,

class Solution {
public:
    static bool cmp1(vector<int> a, vector<int> b){
        return a[0] < b[0];
    }
    int eraseOverlapIntervals(vector<vector<int>>& points) {
        int n = points.size();
        sort(points.begin(),points.end(),cmp1);
        int result = 0; int end = points[0][1];
        for (int i = 1; i < n; i++) {
            if (nums[i].first < end) {
                result++;
                end=min(end,points[i][1]);
            }
            else {
                end = points[i][1];
            }
        }
        return result;
    }
};

主体的代码并没有什么变化,就是if条件判断那里有些细节需要改一下,当重叠的的时候,我们需要将结果加一,然后同样的就是将右边界与这个区间的右边界取一个最小值,那么为什么要取最小值呢,你稍微想想就知道,如果我取大的话,那么后面的是不是更容易发生重叠啊,所以这里我们就是要选取更小的那个,同样的如果说不重叠的话,那就是直接让右边界等于下一个的右边界就可以了,直到数组遍历完,再返回结果即可。下面来看第三题

763.划分字母区间:代码随想录

这道题目的意思就是给你一个字符串,让你划分一下这个字符串,你需要保证这个划分是按顺序来划分的,并且你划分的每一个子串里出现的字符只能在这个子串里出现,也就是说一个字符只能出现在一个子串里,那么,这道题目我们如何来思考呢,这里的思路比较难想,我们要确定这个子串的边界,是不是要知道这个子串里的字符最远的位置在哪里,因为可能有多个相同的字符,你需要保证他们都在同一个子串里,所以我们可以首先考虑先遍历一遍数组,将出现的每个字符的最远的位置都给记录下来,然后再遍历一遍数组,动态的来判断,当我的最远的边界等于我现在的for循环里的i时,代表这就是一个子串,然后就让left也就是左边界等于i+1,直到数组里的所有的元素全部都遍历完之后,就返回我们的结果,下面来看具体的代码的实现。

class Solution {
public:
    vector<int> partitionLabels(string s) {
        vector<int> result; int n = s.size();
        int hash[27];
        for (int i = 0; i < s.size(); i++) {
            hash[s[i] - 'a'] = i;
        }
        int left = 0; int right = 0;
        for (int i = 0; i < n; i++) {
            right = max(right, hash[s[i] - 'a']);
            if (i == right) {
                result.push_back(right - left + 1);
                left = i + 1;
            }
        }
        return result;
    }
};

这里首先就是一个哈希数组,用来记录最远的距离,然后就是定义一个子串的左右边界left,right,每次都让我的right,也就是我的右边界动态的更新,直到我的遍历的位置达到right时,就代表前面的所有字符,都只在这一个子串里面出现过。最后将(right-left+1)的值加入到结果集数组中,最后等到循环结束之后返回,数组即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JS对象、数组、字符串超详细方法

JavaScript 对象方法 对象创建的方式 对象字面量 var dog1 {name: "大黄",age: 2,speak: function () {console.log("汪汪");}, };使用Object构造函数 var dog2 new Object(); dog2.name "大黄"; dog2.age 2; dog2.speak function () …

卷积的通俗解释

以时间和空间两个维度分别理解卷积&#xff0c;先用文字来描述&#xff1a; 时间上&#xff0c;任何当前信号状态都是迄至当前所有信号状态的叠加&#xff1b;时间上&#xff0c;任何当前记忆状态都是迄至当前所有记忆状态的叠加&#xff1b;空间上&#xff0c;任何位置状态都…

初见:AntDB智能运维“三剑客“之ADC

引言 6月15日&#xff0c;PostgreSQL数据库技术峰会广州站圆满落幕。峰会上&#xff0c;亚信安慧数据库智能运维产品负责人李志龙介绍了AntDB的6大数据库引擎和3大工具产品能力。 这里的3大工具分别指&#xff1a; AntDB数据库迁移工具包 MTK 数据库智能运维平台 ACC AntDB数据…

SwiftUI 6.0(iOS 18/macOS 15)关于颜色 Color 的新玩法

概览 WWDC 2024 重装升级的 SwiftUI 6.0 让 Apple 不同平台&#xff08;iOS 18/macOS 15&#xff09;显得愈发的冰壶玉衡、美轮美奂。 之前梦寐以求的颜色混合功能在 WWDC 24 里终于美梦成真啦&#xff01; 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; 概览1. 梦想…

this.$prompt 提示框增加文本域并修改文本域高度

2024.06.24今天我学习了如何对提示框增加文本域的方法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <script>methods:{reject_event(){this.$prompt(驳回内容, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,inputType: textarea,inputPlaceholder…

精益思想在机器人开发中的应用体现

精益思想源于制造业&#xff0c;旨在通过消除浪费、优化流程、持续改进来提升企业竞争力。在机器人开发中&#xff0c;精益思想同样具有指导意义。它要求开发团队在需求分析、设计、制造、测试等各个环节中&#xff0c;不断追求精益求精&#xff0c;力求在降低成本的同时提升产…

同元软控智能电动汽车数字化解决方案亮相CICV 2024

2024年6月18日-20日&#xff0c;由中国汽车工程学会、国家智能网联汽车创新中心、清华大学车辆与运载学院、清华大学智能绿色车辆与交通全国重点实验室举办的第十一届国际智能网联汽车技术年会&#xff08;CICV 2024&#xff09;在北京召开。苏州同元软控信息技术有限公司&…

C++并发之协程实例(四)(通过迭代器访问生成器序列)

目录 1 协程2 实例3 运行 1 协程 协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的&#xff1a;它们通过返回到调用方来暂停执行&#xff0c;并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码&#xff08;例如&#xff0c;在没有显式回调…

【Linux】Centos升级到国产操作系统Openeuler

一、前言 迁移工具采用Openeuler官网提供的x2openEuler工具&#xff0c;是一款将源操作系统迁移到目标操作系统的迁移工具套件&#xff0c;具有批量化原地升级能力&#xff0c;当前支持将源 OS 升级至 openEuler 20.03。 官网链接&#xff1a;openEuler迁移专区 | 迁移专区首页…

8、MFC界面开发

界面开发 1、创建Ribbon样式的应用程序框架2、为Ribbon Bar添加控件2.1 下拉菜单2.2 添加消息处理函数 1、创建Ribbon样式的应用程序框架 创建MFC界面时选择样式为"Office"&#xff0c;然后再选择功能区。 2、为Ribbon Bar添加控件 Ribbon界面开发利用Ribbon Des…

lvs集群 Keepalived

Keepalived高可用集群 Keepalived概述 功能 LVS规则管理LVS集群真实服务器状态监测管理VIP Keepalived实现web高可用 安装keepalived软件 在webservers上配置 启动服务 webservers systemctl start keepalived.service ip a s | grep 192.168 #web1主机绑定vip 测试…

【gif制作】Win下视频生成GIF;工具GifCam单色保存,灰度保存,调速,编辑删除帧添加文本

下载地址 https://blog.bahraniapps.com/gifcam/#download https://gifcam.en.softonic.com/ 界面功能 GifCam 简洁、小巧的 gif 录制软件。GifCam就像照相机一样位于所有窗口的顶部&#xff0c;可以移动它并调整其大小录屏所需的区域。 如图&#xff1a;空闲状态下窗口内…

【uniapp】HBuilderx中uniapp项目运行到微信小程序报错Error: Fail to open IDE

HBuilderx中uniapp项目运行到微信小程序报错Error: Fail to open IDE 问题描述 uniapp开发微信小程序&#xff0c;在HBuilderx中运行到微信开发者工具时报错Error: Fail to open IDE 解决方案 1. 查看微信开发者工具端服务端口是否开放 打开微信开发者工具选择&#xff1…

探秘獭崎酱酒的“12987”工艺,品味纯正酱香

随着中国酱酒市场的不断发展&#xff0c;獭崎酱酒凭借其独特的“12987”酿造工艺&#xff0c;逐渐在白酒行业中崭露头角。今天&#xff0c;我们将深入探讨这一工艺的奥秘&#xff0c;并品味这款独具风味的酱香型白酒。      獭崎酱酒品牌创立于2015年&#xff0c;通过深入调…

小程序安卓手机点击uni-data-select 下拉框选择器会出现蓝色阴影

解决方法&#xff1a;在导入的包中找到uni-data-select.vue&#xff0c;接着找到.uni-stat__select样式&#xff0c;把cursor: pointer去掉。 如果出现穿透问题&#xff0c;uni-select__selector的z-index加高&#xff0c;默认是2。

Linux 字符型设备 + platform总线 + sysfs设备模型

1 概述 第一部分先简单介绍下字符型设备 platform总线 sysfs设备模型的关系。 1.1 . 字符设备驱动 Linux设备驱动分三种&#xff0c;包括字符设备驱动、块设备驱动和网络设备驱动。字符设备只能按字节流先后顺序访问设备内存&#xff0c;不能随机访问。鼠标、触摸屏、LCD等…

骑马与砍杀战团mod制作-基础-对话制作笔记(四)

骑马与砍杀战团mod制作-基础-对话制作笔记&#xff08;四&#xff09; 资料来源 学习的资料来源&#xff1a; b站【三啸解说】手把手教你做【骑砍】MOD&#xff0c;基础篇&#xff0c;链接为&#xff1a; https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sourcea507…

P8813 [CSP-J 2022] 乘方

题目&#xff1a; P8813 [CSP-J 2022] 乘方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 提交记录&#xff1a; 记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 个人主页&#xff1a; xuzb 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) AC代码&…

适用于轨道交通专用的板卡式网管型工业以太网交换机

是网管型 CompactPCI板卡式冗余环网交换机。前面板带有6个 10/100/1000Base-T(X)M12接口。后面的CPCI接口有 8个10/100/1000Base-T (X) 以太网接口。 是特别为轨道交通行业EN50155标准要求而设计的坚固型交换机。它同时具有以下特性&#xff1a; ● 支持2线以太网距离扩展端口&…

嵌入式实验---实验八 ADC电压采集实验

一、实验目的 1、掌握STM32F103ADC电压采集程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、使用STM32F103R6采集可变电阻上的电压信号&#xff0c;并通过计算把当前ADC转换值和电压值显示在LCD1602液晶屏上&#xff1b; 2、对照电压表读数&…