代码随想录打卡Day30

news2024/11/13 3:46:43

今天的题目还可以,第一题看了视频,看卡哥把问题转化成数学问题,把图画出来以后就会了,剩下两题没看视频直接AC的。

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

这个题主要是画完图以后就很好理解了,需要先对区间按照区间左值进行排序,然后依次遍历每一个区间,比较当前区间左值与前一个区间右值的大小关系,如果有重叠,就去两个区间右值的较小值作为当前区间的右值,确保重叠的一组气球全都能被引爆;如果没有重叠的话就直接result++,当然,result的初始值为1.

class Solution {
public:
    static bool My_Compare(vector<int> &a, vector<int> &b){
        return a[0] < b[0];
    }
    int findMinArrowShots(vector<vector<int>>& points) {
        int result = 1;
        //先按照区间左值进行升序排列
        sort(points.begin(), points.end(), My_Compare);
        for(int i = 1; i < points.size(); i++){
            if(points[i][0] > points[i - 1][1]) //无重叠部分
                result++;
            else points[i][1] = min(points[i - 1][1], points[i][1]);    //有重叠部分
        }
        return result;
    }
};

435. 无重叠区间

这道题也简单,首先将向量按照区间左值升序排列,当左值相同时,右值小的排前面。这道题目思路就是:遍历每一个区间,只要当前区间与前一个区间有重叠,则result++(相当于删除一个区间),然后重点来了,当前区间的右值应当更新为当前区间与前一个区间右值的较小值,原因是存在这么一种特殊情况:

整个向量中有a,b,c,d,e这几个向量,已经按照区间左值升序排列,其中b和c与a重叠了,如果不及时更新区间右值的话会造成不必要的删除,删去a,则只需删一次,删去b,则c也必须删才能不冲突。

class Solution {
public:
    static bool My_Compare(vector<int> &a, vector<int> &b){
        if(a[0] < b[0]) return true;
        else if(a[0] > b[0]) return false;
        return a[1] < b[1];  //区间左值相同时,右值小的排前面
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        int result = 0;
        //先对向量中的区间按照区间左值进行升序排列
        sort(intervals.begin(), intervals.end(), My_Compare);
        for(int i = 1; i < intervals.size(); i++){
            if(intervals[i][0] < intervals[i - 1][1]){ //出现重叠
                result++;
                intervals[i][1] = min(intervals[i][1], intervals[i - 1][1]);
            }  
        }
        return result;
    }
};

763.划分字母区间

这道题目需要绕个弯子,首先需要用一个哈希表存储字符串中各个字母出现的首个位置和最后一个位置(包含全部该字母的最小区间),然后同步存入一个二位整型向量中,由于遍历的时候是从左往右遍历的,所以二维向量中的一维向量都是按照左值升序排列的,无需再次排序。得到这个二维向量后,就遍历这个二维向量中的每一个向量,如果当前区间与上个区间有重叠,则维护区间的右值为当前区间与上个区间右值的较大值,就是将区间不断地“膨胀”,直到遍历到的区间与前面那个膨胀的区间不再有交集。此时将前面那个膨胀区间的长度存入result数组中,注意,当循环结束后,最后一个膨胀区间并没有保存进result数组中,需要在循环结束后将其存入(这也是为了应对只有一个膨胀区间的情况,也就是整个字符串不能分割为2个及以上的子字符串)。

class Solution {
public:
    vector<int> partitionLabels(string s) {
        vector<int> result;
        vector<vector<int>> v;  //记录各个字符的存在区间
        int start_index = 0;
        map<char, vector<int>> Hash;
        for (int i = 0; i < s.size(); i++) {
            if (Hash.find(s[i]) == Hash.end()) {  //首次遇到这个字母
                int pos_begin = s.find(s[i]); //当前字母首次出现的位置
                int pos_end = s.rfind(s[i]);  //当前字母最后出现的位置
                Hash[s[i]] = { pos_begin, pos_end };  //记录包含该字符的最小区间范围
                v.push_back({ pos_begin, pos_end });
            }
        }
        //计算最小并集
        for (int i = 1; i < v.size(); i++) {
            if (v[i][0] <= v[i - 1][1]) { //重叠
                v[i][1] = max(v[i][1], v[i - 1][1]);
            }
            else {
                result.push_back(v[i][0] - start_index);
                start_index = v[i][0];
            }
        }
        result.push_back(s.size() - start_index); //把最后一次没加上的给加上
        return result;
    }
};

加油(ง •_•)ง

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

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

相关文章

飞速了解Conda的作用和安装使用教程

当我们想要在github上克隆不同的项目下来运行时&#xff0c;会发现项目的语言环境或包的版本不同&#xff0c;出现版本冲突问题会导致程序无法运行、兼容性问题频出。我们常常需要管理多个项目&#xff0c;每个项目可能依赖于不同的包版本或编程语言环境。如果不加以管理&#…

华为OD机试 - 报文响应时间 - 贪心算法、位运算(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

基于SpringBoot的准妈妈孕期交流平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;IDEA/Eclipse、Navicat 系统展示 首页 管理员登录 用户管理 早教…

C++ STL关联容器Set与集合论入门

1. 简介 Set&#xff08;集合&#xff09;属于关联式容器&#xff0c;也是STL中最实用的容器&#xff0c;关联式容器依据特定的排序准则&#xff0c;自动为其元素排序。Set集合的底层使用一颗红黑树&#xff0c;其属于一种非线性的数据结构&#xff0c;每一次插入数据都会自动…

【F的领地】项目拆解:小学教辅资料

项目介绍 虚拟资料项目的赛道其实一直可以做&#xff0c;实际上就是一个信息差项目。 知识付费是常青树&#xff0c;人天生有为知识付费的倾向。 而且虚拟资料通常一份 19~99 的资料有这方面需求很容易就能付款。 主要是产附属的流量再提问题。 我有个同乡&#xff0c;18年…

DDOS攻击学习-scapy使用python编写SYN拒绝服务攻击

文章目录 启动&配置发送数据怎么查看回答查看详细的数据sinff()hexdump() 使用python进行SYN拒绝服务攻击 安装npcap可以查看此教程 启动&配置 scapy#控制台输入如图所示可以查看IP等, 格式是 变量名 IP()/TCP()你可以查看相关信息 变量名.show()以上的值都可以进行…

2024第三届大学生算法大赛 真题训练2 解题报告 | 珂学家 | FFT/NTT板子

前言 题解 D是FFT板子题&#xff0c;这么来看&#xff0c;其实处于ACM入门题&#xff0c;哭了T_T. D. 行走之谜 思路: FFT 如果你知道多项式乘法&#xff0c;继而知道FFT&#xff0c;那题纯粹就是板子题&#xff0c;可惜当时比赛的时候&#xff0c;无人AC。 这题来简单抽象…

最好磁吸充电宝是哪个牌子?目前公认好用磁吸充电宝排行榜!

在现代生活中&#xff0c;移动设备的普及使得充电宝成为了人们日常出行必备的工具。尤其是磁吸充电宝&#xff0c;以其便捷的使用体验和高效的充电速度&#xff0c;逐渐受到消费者的青睐。然而&#xff0c;在选择充电宝时&#xff0c;安全性能是不可忽视的重要因素。一个好的充…

Redis入门1

Redis简介 Redis是一个基于内存的 key-value 结构数据库。 基于内存存储&#xff0c;读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ window版启动命令 redis-server.exe redis.windows.con…

使用dnSpy调试服务端IIS部署的WebService的程序集

服务器上部署的C#编写WebService出现问题&#xff0c;需要排查&#xff0c;但没有对应的源码&#xff0c;只能在服务器端想办法调试。   IIS中部署的WebService服务&#xff0c;其应用程序池对应操作系统中的w3p.exe进程&#xff08;高版本IIS对应的进程是w3wp&#xff09;。…

[001-02-001]. 第07-03节:理解线程的安全问题

我的后端学习大纲 我的Java学习大纲 当多个线程共享一份数据的时候&#xff0c;不同的线程对数据进行操作&#xff0c;就可能会导致线程安全问题&#xff0c;比如卖票过程中出现了错票和重复票的问题&#xff1a; 1、卖票问题分析&#xff1a; 1.1.理想状态&#xff1a; 1.2.极…

软考架构-面向服务的架构风格

一、SOA 1、概念 面向服务开发&#xff0c;服务之间通过简单、精确定义接口进行通信&#xff0c;不涉及底层编程接口和通信模型。多个服务挂载在ESB&#xff08;企业服务总线&#xff09;上进行通信。 2、特征 可从企业外部访问、随时可用&#xff08;服务请求能被及时响应…

这款神器,运维绝杀 !!! 【送源码】

项目简介 CrowdSec 是一款开源的、基于社区协作的网络安全防护工具&#xff0c;它通过分析和共享IP信誉数据来对抗恶意行为。该软件不仅支持IPv6&#xff0c;而且相较于传统的Python实现&#xff0c;其采用Go语言编写&#xff0c;运行速度提升了60倍。CrowdSec 利用Grok模式解析…

Datasheet SHT20芯片的数据手册

Datasheet SHT20芯片的数据手册 I2C读取湿度传感器返回的16位数据。SCL SDA 14位有效&#xff0c;我以为是将后二位删除&#xff0c;实际上看完手册才知道是后二位值无用&#xff0c;不是删除&#xff0c;而是清0&#xff0c;实际上还是16为&#xff0c;知识后二位是0还是1&…

Java重修笔记 第五十四天 坦克大战(四)多线程基础

线程 当点击运行按钮运行程序时&#xff0c;就相当于启动了一个进程&#xff0c;虚拟机进入 mian 方法后会开启一个名为 mian 的主线程&#xff0c;main 方法体中创建一个线程对象&#xff0c;调用该线程对象的 start 方法又创建一个子线程&#xff0c;子线程的启动并不会阻塞…

2024/9/11学校教的响应式前端能学到什么?

9.11 1&#xff09;砌砖 确定整体框架&#xff0c;而不是想到一点写一点&#xff0c;类似盖大楼&#xff0c;不是想到哪盖到哪&#xff0c;先砌砖&#xff0c;再装修 砌砖前先划分好砌砖范围(初始化样式) 清除body自带的内外边距 * { margin: 0; padding: 0; }去掉li的小圆点…

H5接入Steam 获取用户数据案例 使用 OpenID 登录绑定公司APP账户 steam公开用户信息获取 steam webapi文档使用

官方文档地址 1.注册 Steam API Key&#xff1a; 你需要一个 Steam Web API Key&#xff0c;可以在 Steam API Key 页面 获取。https://steamcommunity.com/dev/apikey 这里开发做demo用自己steam账户的就好&#xff0c;后续上线要用公司的账户 2.使用 OpenID 登录&#xff…

【c++实现】统计上升四元组

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1. 题目描述2. 解释3. DP前缀和枚举 1. 题目描…

3.Kubernetes资源对象之pod

&#x1f482; 个人主页: Java程序鱼 &#x1f4ac; 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏(一键三连)和订阅专栏 &#x1f464; 微信号&#xff1a;hzy1014211086&#xff0c;想加入技术交流群的小伙伴可以加我好友&#xff0c;群里会分享学习资料、学习方法…

经典蓝桥题目-------欧拉函数的应用

输入样例&#xff1a; 3 4 9 5 10 42 9999999967 输出样例&#xff1a; 6 1 9999999966 分析&#xff1a; 设 gcd(a,m) d,则 d|a,d|m 而 gcd(a,m) gcd(ax,m) 则有 d|x 根据题目有 0<x<m 同样的有 0< x < m (x,m是同时除以d的值) 于是我们发现只要求…