当前位置: 首页 > news >正文

【代码随想录】【算法训练营】【第36天】[452]用最少数量的箭引爆气球 [435]无重叠区间 [763]划分字母区间

前言

思路及算法思维,指路 代码随想录。
题目来自 LeetCode。

day 36,周三,最难坚持的一天~

题目详情

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

题目描述

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

解题思路

前提:区间可能重叠
思路:贪心算法:按照起始位置排序,一支箭尽可能射多的气球。
重点:判断当前弓箭终止范围。

代码实现

C语言
贪心思维

局部最优:当气球出现重叠,一起射,所用弓箭最少。
全局最优:把所有气球射爆所用弓箭最少。
为了让气球尽可能的重叠,需要对数组进行排序。
如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭。

int cmp(const void *p1, const void *p2)
{int *pp1 = *(int **)p1;int *pp2 = *(int **)p2;// 按照起始位置排序, 相同起始位置按终止位置排序if (pp1[0] > pp2[0]) {return 1;}else if (pp1[0] == pp2[0]) {if (pp1[1] > pp2[1]) {return 1;}}return 0;
}int findMinArrowShots(int** points, int pointsSize, int* pointsColSize){// 按照起始位置排序, 相同起始位置按终止位置排序qsort(points, pointsSize, sizeof(int *), cmp);// 至少需要一支箭int count = 1;int curRange = points[0][1];for (int i = 1; i < pointsSize; i++) {// 判断是否需要使用下一只弓箭:当前射箭范围是否与当前数组范围有交集if (curRange < points[i][0]) {count++;curRange = points[i][1];}// 判断当前数组范围是否会缩小当前射箭范围if (curRange > points[i][1]) {curRange = points[i][1];}}return count;
}

[435] 无重叠区间

题目描述

435 无重叠区间
435 无重叠区间

解题思路

前提:区间可能重叠
思路:贪心算法:按照起始位置排序,判断区间是否重复,去除重复区间时去除更大的区间,留下较小的区间。
重点:判断当前区间终止范围。

代码实现

C语言
起始位置排序,判断重复区间

按照起始位置排序,起始位置相同按照终止位置排序,判断区间是否重复,去除重复区间时去除更大的区间,留下较小的区间

int cmp(const void *p1, const void *p2)
{int *pp1 = *(int **)p1;int *pp2 = *(int **)p2;return pp1[0] == pp2[0] ? pp1[1] - pp2[1] : pp1[0] - pp2[0];
}int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize) {// 按照起始位置排序,起始位置相同按照终止位置排序qsort(intervals, intervalsSize, sizeof(int *), cmp);int count = 0;int endNum = intervals[0][1];// 判断区间是否重复,去除重复区间时去除更大的区间,留下较小的区间for (int i = 1; i < intervalsSize; i++) {// 判断起始位置与之前终止位置是否重叠if (endNum > intervals[i][0]) {count++;}else {endNum = intervals[i][1];}// 更新终止位置if (endNum > intervals[i][1]) {endNum = intervals[i][1];}}return count;
}
终止位置排序,判断非交叉区间

按照终止位置排序,终止位置相同按照起始位置排序,判断非重复区间的个数,需要移除区间数量即为重复区间个数,即总区间个数 - 非重复区间个数

int cmp(const void *p1, const void *p2)
{int *pp1 = *(int **)p1;int *pp2 = *(int **)p2;return pp1[1] == pp2[1] ? pp1[0] - pp2[0] : pp1[1] - pp2[1];
}int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize) {// 按照终止位置排序,终止位置相同按照起始位置排序qsort(intervals, intervalsSize, sizeof(int *), cmp);int count = 1;int endNum = intervals[0][1];// 判断非重复区间的个数for (int i = 1; i < intervalsSize; i++) {// 判断起始位置与之前终止位置是否重叠if (endNum <= intervals[i][0]) {count++;endNum = intervals[i][1];}}// 需要移除区间数量即为重复区间个数,即总区间个数 - 非重复区间个数return intervalsSize - count;
}

[763] 划分字母区间

题目描述

763 划分字母区间
763 划分字母区间

解题思路

前提:同一字母处于同一子字符串中
思路:要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点。
重点:确定分割点的位置,经过的每个字符串的最远位置。

代码实现

C语言
贪心思维

统计每个字母最后出现的位置;圈字符,找分割点;遍历到当前元素出现的最远位置,即为分割点。

/*** Note: The returned array must be malloced, assume caller calls free().*/#define LETTERS_MAX_NUMS  (26)int* partitionLabels(char* s, int* returnSize) {int sLen = strlen(s);int range[LETTERS_MAX_NUMS];// 统计每个字母最后出现的位置for (int i = 0; i < sLen; i++) {range[s[i] - 'a'] = i;   }// 输出初始化int *ans = (int *)malloc(sizeof(int) * LETTERS_MAX_NUMS);int ansSize = 0;// 划分尽可能多的片段, 每个片段尽可能短,但是要包含所有同一字母// 圈字符,找分割点int left = 0;int right = 0;for (int i = 0; i < sLen; i++) {// 缓存当前元素的最远位置if (right < range[s[i] - 'a']) {right = range[s[i] - 'a'];}// 遍历到当前元素出现的最远位置,即为分割点if (i == right) {ans[ansSize] = i - left + 1;ansSize++;left = i + 1;}}*returnSize = ansSize;return ans;
}

今日收获

  1. 贪心算法:不太能想到的思路。

相关文章:

【代码随想录】【算法训练营】【第36天】[452]用最少数量的箭引爆气球 [435]无重叠区间 [763]划分字母区间

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 36&#xff0c;周三&#xff0c;最难坚持的一天~ 题目详情 [452] 用最少数量的箭引爆气球 题目描述 452 用最少数量的箭引爆气球 解题思路 前提&#xff1a;区间可能重叠 思路&#xff1a;…...

【ElasticSearch】windows server 2019安装ES8.9.1 + kibana8.9.1 + IK分词器

目录 准备工作 ES Kibana IK 安装 es es访问测试 将es安装为系统服务 Kibana 配置es 运行kibana 访问测试 IK 补充 准备工作 ES8.9.1 kibana8.9.1 IK的版本最好要对应上&#xff01;&#xff01;&#xff01; ES es8.9.1&#xff1a; https://artifa…...

前端面试题(一)答案版

面试形式&#xff1a;线下面试&#xff1a;时长60分钟 面试过程&#xff1a;填写个人信息->笔记题->HR根据前面2份资料提问->技术面试&#xff08;见如下面试题&#xff09; 面试官&#xff1a;项目负责人 公司背景&#xff1a;教育培训公司&#xff0c;项目给本公…...

qt c++ 子界面调用主窗口函数

方法&#xff1a;使用单例模式 将主窗口设计为单例模式。在子界面中通过单例访问主窗口实例&#xff0c;并调用公共函数。 // mainwindow.h #include <QMainWindow>class MainWindow : public QMainWindow {Q_OBJECTpublic:static MainWindow& instance() {static …...

Excel中多条件判断公式怎么写?

在Excel里&#xff0c;这种情况下的公式怎么写呢&#xff1f; 本题有两个判断条件&#xff0c;按照题设&#xff0c;用IF函数就可以了&#xff0c;这样查看公式时逻辑比较直观&#xff1a; IF(A2>80%, 4, IF(A2>30%, 8*(A2-30%),0)) 用IF函数写公式&#xff0c;特别是当…...

从申请到放款,外汇贷款软件的全流程测试解析

一、业务概述 外汇贷款是商业银行经营的一项重要资产业务。它是指银行运用外汇资金&#xff0c;向借款人提供短期或长期的外汇资金融通。这种贷款业务不仅能帮助银行获取经济效益&#xff0c;还是银行联系客户的主要途径。外汇贷款对于利用外资、引进先进技术设备&#xff0c;以…...

数据分析之数据预处理、分析建模、可视化

1、数据分析概述 数据分析&#xff1a;对大量有序或无序的数据进行信息的集中整合、运算提取、展示等操作&#xff0c;通过这些操作找出研究对象的内在规律。 目的&#xff1a;揭示事物运动、变化、发展的规律。 意义&#xff1a;提高系统运行效率、优化系统作业流程、预测未…...

计算机网络:1概述

概述 因特网 网络、互连网&#xff08;互联网&#xff09;与因特网的区别与关系 若干节点和链路互连形成网络&#xff0c;若干网络通过路由器互连形成互连网&#xff0c;世界上最大的互连网是互联网&#xff08;因特网Internet&#xff09;。 因特网发展的三个阶段 因特网…...

Mybatis工作流程和插件开发

在了解插件开发之前&#xff0c;我们先总体的来梳理一下Mybatis的大致执行流程&#xff1a; 1.new SqlSessionFactoryBuilder().build(inputStream):先根据配置文件&#xff08;包含了全局配置文件和映射配置文件&#xff09;初始化一个对象Configuration&#xff08;这里对象里…...

部署大模型LLM

在autodl上部署大模型 windows运行太麻烦&#xff0c;环境是最大问题。 选择云上服务器【西北B区 / 514机】 cpp (c c plus plus) 纯 C/C 实现&#xff0c;无需外部依赖。针对使用 ARM NEON、Accelerate 和 Metal 框架的 Apple 芯片进行了优化。支持适用于 x86 架构的 AVX、…...

【CT】LeetCode手撕—88. 合并两个有序数组

目录 题目1- 思路2- 实现⭐88. 合并两个有序数组——题解思路 2- ACM实现 题目 原题连接&#xff1a;88. 合并两个有序数组 1- 思路 模式识别 模式1&#xff1a;两个有序数组合并 ——> 双指针模式2&#xff1a;返回结果填充到 nums1[mn] ——> 需要开辟新的数组空间 …...

深入分析 Android BroadcastReceiver (二)

文章目录 深入分析 Android BroadcastReceiver (二)1. 深入理解 BroadcastReceiver 的高级使用和优化2. 有序广播&#xff08;Ordered Broadcasts&#xff09;2.1 实现有序广播 3. 粘性广播&#xff08;Sticky Broadcasts&#xff09;3.1 使用粘性广播 4. 本地广播&#xff08;…...

Linux常⽤服务器构建-ssh和scp

目录 1.ssh <1>ssh介绍 <2>安装ssh A.安装ssh服务器 B.远程登陆 <3>使⽤ssh连接服务器 2.scp 本地⽂件复制到远程&#xff1a; 本地⽬录复制到远程&#xff1a; 远程⽂件复制到本地&#xff1a; 远程⽬录复制到本地&#xff1a; 1.ssh <1>…...

《QT实用小工具·七十》openssl+qt开发的P2P文件加密传输工具

1、概述 源码放在文章末尾 该项目实现了P2P的文件加密传输功能&#xff0c;具体包含如下功能&#xff1a; 1、 多文件多线程传输 2、rsaaes文件传输加密 3、秘钥随机生成 4、断点续传 5、跨域传输引导服务器 项目界面如下所示&#xff1a; 接收界面 发送界面 RSA秘钥生成…...

短链接生成器排名前三!长链接转化成短链接工具有哪些?

在现今的网络营销环境中&#xff0c;短链接的应用越来越广泛。它不仅能简化长链接&#xff0c;提高分享效果&#xff0c;还能提升企业品牌形象和用户体验。于是&#xff0c;市场上涌现出众多短链接生成工具。本文将为您揭秘短链接生成器排名前三的产品&#xff0c;帮您找到最适…...

Vue50-mixin混入

一、为什么要使用 mixin混入 两个组件共享一个配置。 二、使用 mixin混入 2-1、创建一个混合js文件 2-2、引入混合js文件 1、局部混合 在每个组件中都引入混合js文件 注意&#xff1a; 混合就是复用配置&#xff0c;vm实例中的所有的配置项&#xff0c;都能在混合.js文件中写…...

Java创建线程的方式

继承Thread类 这是创建线程的基本方式之一。你需要创建一个新的类&#xff0c;该类继承自Thread类&#xff0c;并重写run()方法。然后&#xff0c;你可以创建这个类的一个实例并调用它的start()方法来启动新线程。 public class MyThread extends Thread { Override public vo…...

C# 程序结构

C# 程序结构 C#(读作“C-sharp”)是一种由微软开发的高级编程语言,它是.NET框架的一部分。C# 设计用于现代软件开发,具有强大的类型系统、丰富的库支持和面向对象的特性。本文将详细介绍C#程序的基本结构,包括其语法、类型系统、控制结构、类和对象等。 C# 程序的基本结…...

【Linux】使用 iptables 验证访问HDFS 所使用到的端口

目录 ​编辑 一、实操背景 二、iptables 简介 三、模拟操作 一、实操背景 背景&#xff1a; 在客户有外网的服务器需要访问内网大数据集群HDFS&#xff0c;使用iptable模拟测试需要开放的端口。 二、iptables 简介 具体介绍看文章&#xff1a; 【Linux】Iptables 详解与实战…...

工程设计问题---多盘离合器制动器设计问题

这个问题的主要目的是使多片式离合器制动器的质量最小化。在这个问题中&#xff0c;使用了五个整数决策变量&#xff0c;它们是内半径&#xff08;x1&#xff09;、外半径&#xff08;x2&#xff09;、盘厚度&#xff08;x3&#xff09;、致动器的力&#xff08;x4&#xff09;…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...