代码随想录算法训练营:30/60

非科班学习算法day30 | LeetCode452:用最少数量的箭引爆气球 ,Leetcode435:无重叠区间 ,Leetcode763:划分字母区间 


介绍

包含LC的两道题目,还有相应概念的补充。

相关图解和更多版本:

代码随想录 (programmercarl.com)https://programmercarl.com/#%E6%9C%AC%E7%AB%99%E8%83%8C%E6%99%AF


二、LeetCode题目

1.LeetCode452:用最少数量的箭引爆气球 

题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

题目解析

       越来越理解贪心的想法了,实际上还是找到“个例”,然后推广到全部的情况,就是数学归纳法,只不过我们没有严格证明,所以我们的解法在跑案例的时候可能会卡住

        这道题最主要的思路就是把射箭问题抽象成处理区间重叠问题,画图可以看出来,在对数组排序的情况下,重叠的数组都可以用一下打中,当没有重叠的时候就要再找一只箭。

        这里面首先我们需要直到什么叫没有重叠,那就是后面区间的左端点小于前一个区间的右端点,那么这两个区间必有交集。

        同时排序是非常常见的处理,如果数据无从处理应该想到能不能先有序化。

 c++代码如下:

class Solution {
public:// 对数组内部升序排列-按照左区间static bool cmp(vector<int>& a, vector<int>& b) { return a[0] < b[0]; }int arr = 1;int findMinArrowShots(vector<vector<int>>& points) {// 异常处理if (!points.size())return 0;// 排序sort(points.begin(), points.end(), cmp);for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) {// 下一只箭(重叠区间)arr++;}// 重叠区间处理else {points[i][1] = min(points[i - 1][1], points[i][1]);}}return arr;}
};

这里再给出一个对原区间除了排序就没有其他修改操作的写法:

class Solution {
public:// 对数组内部升序排列-按照左区间static bool cmp(vector<int>& a, vector<int>& b) { return a[0] < b[0]; }int arr = 1;int findMinArrowShots(vector<vector<int>>& points) {// 异常处理if (!points.size())return 0;// 排序sort(points.begin(), points.end(), cmp);//新建一个cur区间vector<int> cur = points[0];for (int i = 1; i < points.size(); i++) {if (points[i][0] > cur[1]) {// 下一只箭(重叠区间)arr++;cur = points[i];}// 重叠区间处理else {cur[1] = min(points[i][1], cur[1]);}}return arr;}
};

注意点:这个写法是新建了一个cur区间作为判断重叠区间的依据。在维护的过程中,如果没有公共交集了,那么要将cur的左区间重置为当前元素的左区间,其他情况则关注右区间就可以。

 2.Leetcode435:无重叠区间 

题目链接:435. 无重叠区间 - 力扣(LeetCode)

题目解析

       和之前的处理方式基本相同,需要注意的就是这里等号的处理,是不属于重叠区间的。

 C++代码如下: 

class Solution {
public://依旧升序排列static bool cmp(vector<int>& a, vector<int>& b){return a[0]<b[0];}int res = 0;int eraseOverlapIntervals(vector<vector<int>>& intervals) {if(!intervals.size()) return 0;sort(intervals.begin(), intervals.end(), cmp);for(int i = 1; i<intervals.size();i++){if(intervals[i][0]<intervals[i - 1][1]){res++;intervals[i][1] = min(intervals[i][1], intervals[i - 1][1]);}}return res;}
};

3.Leetcode763:划分字母区间

题目链接:763. 划分字母区间 - 力扣(LeetCode)

题目解析

       本质上是区间的合并,思路有点巧妙(邪门),首先遍历一遍,用哈希表记录当前元素在字符串中出现的最大位置。

        如果我们想切分字符串,我们要保证,该字符串内所有元素都出现在被截取之后的字符串中。所以我们继续遍历,不断更新我们需要覆盖的右区间端点。

        直到!找到下标和右区间端点一样的位置,这里需要理解就相当于找到了最短的一次切分距离,可以进行记录。

C++代码如下:

class Solution {
public:vector<int> partitionLabels(string s) {//创建哈希表记录字母出现的最后位置int hash[26] = {0};for(int i = 0; i<s.size(); ++i){hash[s[i] - 'a'] = i; //实时更新}vector<int> res;int start = 0;int end = 0;for(int i = 0; i<s.size(); ++i){//合并区间end = max(end, hash[s[i] - 'a']);if(end == i){res.push_back(end - start +1);start = i+1;}}return res;}
};

注意点1:说贪也贪,说不贪就纯模拟。需要学会的除了思路就是怎么将字符的相对位置表示。

 

总结


打卡第30天,坚持!!!

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

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

相关文章

centos磁盘空间满了-问题解决

报错问题解释&#xff1a; CentOS系统在运行过程中可能会出现磁盘空间不足的错误。这通常发生在以下几种情况&#xff1a; 系统日志文件或临时文件过大导致磁盘空间不足。 安装了大量软件或文件而没有清理无用文件。 有可能是某个进程占用了大量磁盘空间。 问题解决方法&a…

多服务下,服务与服务之间的调用(SpringCloudAlibaba入门一)

多服务下&#xff0c;服务与服务之间的调用&#xff08;SpringCloudAlibaba入门一&#xff09; 说明直接看代码 说明 在SpringBoot情况下&#xff0c;如果我们有多个子模块而且代码之间没有相互引用&#xff0c;那么子项目与子项目之间的调用方式就只能通过http请求的方式去调用…

必看!微信小程序必备证书!

微信小程序必备SSL证书。在日益增长的数字经济中&#xff0c;微信小程序已成为商家与消费者之间重要的交互平台。由于其便捷性和广泛的用户基础&#xff0c;越来越多的企业选择通过小程序来提供服务。然而&#xff0c;在开发和部署微信小程序时&#xff0c;确保数据安全是一个不…

Ubuntu22.04.4 LTS系统/安装Anaconda【GPU版】

安装过程 1.wget命令行下载 下载Anaconda并保存文件至本地指定目录 wget -c https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh -P ~/Downloads/anaconda3 查看是否下载好了 2.安装Anaconda 2.1 bash命令安装 bash后面是anaconda3下载好的路径 bash …

学生选课管理系统(Java+MySQL)

技术栈 Java: 用于实现系统的核心业务逻辑。MySQL: 作为关系型数据库&#xff0c;用于存储系统中的数据。JDBC: 用于Java程序与MySQL数据库之间的连接和交互。Swing GUI: 用于创建图形用户界面&#xff0c;提升用户体验。 系统功能 我们的学生选课管理系统主要针对学生和管理…

AIGC 与软件开发:是助力还是取代?

《AIGC 与软件开发&#xff1a;是助力还是取代&#xff1f;》 在当今的软件开发领域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;的崛起无疑是一场变革性的浪潮。从代码生成到错误检测&#xff0c;再到自动化测试&#xff0c;AI 工具正以前所未有的方式融入开发者…

vue3源码(六)渲染原理-runtime-core

1.依赖关系 runtime-dom 依赖于runtime-core,runtime-core 依赖于reactivity和sharedruntime-core提供跨平台的渲染方法createRenderer&#xff0c;用户可以自己传递节点渲染的渲染方法renderOptions&#xff0c;本身不关心用户使用什么APIruntime-dom提供了为浏览器而生的渲染…

MSI打包后门成安装包

目录 浏览器下载地址 启动>next 选择后门所在路径&#xff0c;和生成安装包后存放路径 next>Hidden 配置变量 Look up随便找个伪装&#xff0c;然后点击一下Creat New ​注册表Registry导入 ​点击否&#xff0c;不购买专业版 ​安装包生成成功​编辑 浏览器下…

Mybatis进阶の常用配置级联查询

2 Mybatis常用配置 mybatis-config.xml中除了可以配置数据库服务器的环境以外&#xff0c;还可以配置其他的操作&#xff0c;帮助开发人员简化配置代码。常见的配置信息有以下内容&#xff1a; 1 配置内容 SqlMapConfig.xml中配置的内容和顺序如下&#xff1a;properties&am…

(自用)共享单车服务器(一):服务器项目配置

项目目录结构 conf:用来存放配置文件 git:用来存放从git上克隆的项目 src:用来存放项目源文件 test:用来存放测试文件 third:用来存放第三方头文件、第三方库 安装iniparser(关于iniparser的使用需进一步学习) 1.项目目录中创建git文件夹&#xff0c;用于存放GitHub上克隆…

计算机网络-IGMPv1工作原理简介

一、IGMPv1的原理简介 前面我们大致了解了IGMP用于在连接组播组成员的组播路由器总通过交互IGMP报文生成IGMP组表项和IGMP路由表项。IGMP报文封装在IP报文中。到目前为止&#xff0c;IGMP有三个版本&#xff1a;IGMPv1、IGMPv2、IGMPv3。 今天主要学习IGMPv1的作用和工作原理。…

深度学习论文: LLaMA: Open and Efficient Foundation Language Models

深度学习论文: LLaMA: Open and Efficient Foundation Language Models LLaMA: Open and Efficient Foundation Language Models PDF:https://arxiv.org/pdf/2302.13971.pdf PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概述 本文介绍了LLaMA&#xff0…

浅谈重要组件JSR223介绍

浅谈重要组件JSR223介绍 JSR223 脚本组件是一个极其强大的特性&#xff0c;它允许用户利用各种脚本语言编写复杂的测试逻辑&#xff0c;极大地增强了 JMeter 的灵活性和功能。本文将对 JSR223 进行详细介绍&#xff0c;并解释如何在 JMeter 测试计划中有效地应用它。 JSR223 …

数据开源 | Magic Data大模型高质量十万轮对话数据集

能够自然的与人类进行聊天交谈&#xff0c;是现今的大语言模型 (LLM) 区别于传统语言模型的重要能力之一&#xff0c;近日OpenAI推出的GPT-4o给我们展示了这样的可能性。 对话于人类来说是与生俱来的&#xff0c;但构建具备对话能力的大模型是一项不小的挑战&#xff0c;收集高…

基于Android平台开发,仿头条新闻app

1. 项目模块功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;聚合数据API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现新闻列表使用SQLite数据库实现用户登录&#xff0c;注册&#xff0c;浏览历史记录使用SharedPreference…

一、银河麒麟在VMware虚拟机中如何永久更改窗口分辨率大小?

1 在/etc/X11/xorg.conf.d目录下创建一个xorg.conf文件&#xff0c;该文件决定系统启动后默认的分辨率 2 填写如下内容 Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验17 开放最短路径优先OSPF

一、实验目的 1.验证OSPF协议的作用&#xff1b; 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; 2.验证OSPF协议的作用。 四、实验步骤 1.构建网…

AutoMQ 与蚂蚁数科达成战略合作

近期&#xff0c;AutoMQ 与蚂蚁数科正式签署战略合作协议&#xff0c;将和蚂蚁数科云原生 PaaS 平台 SOFAStack 在产品研发、生态集成、市场合作、技术社区影响力等多方面开展深度合作。 AutoMQ 是业内领先的消息和流存储服务提供商&#xff0c;基于云原生基础设施重新设计了 …

解密 AI 客服:LangChain+ChatGPT 打造智能客服新时代

你需要了解 ChatGPT ChatGPT 是 OpenAI 开发的一种基于人工智能技术的自然语言处理模型。它可以通过对大量文本数据进行训练&#xff0c;自动生成高质量的回答和对话。ChatGPT 具有高效、准确、自然的特点&#xff0c;可以帮助人们更加高效地处理信息和交流。 ChatGPT 有很多…

el-from中校验,如果某一项需要另一项填写才能校验

使用validateField <el-form:model"params":rules"rules":scroll-to-error"true"ref"refrom"v-else><el-form-item label"用户姓名" prop"name"><el-input placeholder"请输入用户姓名"…