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

代码随想录算法训练营第三十天 | 贪心算法 part04

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

本题的关键是首先根据左边界或右边界进行排序,使得可能重叠的气球排在一起,好处理。

class Solution {static bool cmp(vector<int>& a, vector<int>& b) {if (a[0] == b[0])return a[1] < b[1];elsereturn a[0] < b[0];}
public:int findMinArrowShots(vector<vector<int>>& points) {int result = 0;sort(points.begin(), points.end(), cmp);for (int i = 0; i < points.size(); ++i) {result++;int end = points[i][1];while (i < points.size() - 1 && end >= points[i + 1][0]) {end = min(end, points[i + 1][1]);i++;}}return result;}
};

435. 无重叠区间

与上一题很相似,关键是在发生重叠后要更新end,新的右边界,因为肯定要去掉一个数组,贪心的做法是去掉右边界大的。

class Solution {static bool cmp(const vector<int>& a, const vector<int>& b) {if (a[0] == b[0])return a[1] < b[1];else return a[0] < b[0];}
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), cmp);int result = 0;for (int i = 1; i < intervals.size(); ++i) {int end = intervals[i - 1][1];while (i < intervals.size() && end > intervals[i][0]) {end = min(end, intervals[i][1]);result++;i++;}}return result;}
};

763.划分字母区间

本题分两步:

  1. 通过遍历字符串s,找到每个字符出现的最后位置。
  2. 根据上述信息,再遍历一遍字符串s,开始分割。
class Solution {
public:vector<int> partitionLabels(string s) {int hash[27] = {0};for (int i = 0; i < s.size(); ++i) {hash[s[i] - 'a'] = i;}vector<int> result;int start = 0, end = 0;for (int i = 0; i < s.size(); ++i) {end = max(end, hash[s[i] - 'a']);if (i == end) {result.push_back(end - start + 1);start = end + 1;}}return result;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python接口自动化测试框架(实战篇)-- Jenkins持续集成
  • PXE+Kickstart自动化安装操作系统
  • 荒原之梦考研:考研二战会很难吗?
  • 二十八、【人工智能】【机器学习】【PyTorch】- 手写体识别
  • 下一个排列
  • FFmpeg有理数相关的源码:AVRational结构体和其相关的函数分析
  • 英伟达显卡查看占用情况
  • 设计模式实战:报表生成系统的设计与实现
  • Chapter 22 数据可视化——折线图
  • Chapter 26 Python魔术方法
  • 用phpstudy搭建MySQL数据库
  • WebKit 的简介及工作流程
  • 科普文:JUC系列之多线程门闩同步器CountDownLatch的使用和源码
  • C++STL专题-string类
  • 低代码: 技术实现概述
  • 《剑指offer》分解让复杂问题更简单
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 2017前端实习生面试总结
  • Bytom交易说明(账户管理模式)
  • CSS3 变换
  • es6--symbol
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Rancher如何对接Ceph-RBD块存储
  • TypeScript迭代器
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 聊聊sentinel的DegradeSlot
  • 数据科学 第 3 章 11 字符串处理
  • 思否第一天
  • 算法之不定期更新(一)(2018-04-12)
  • 阿里云服务器如何修改远程端口?
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​ArcGIS Pro 如何批量删除字段
  • $.ajax()
  • (补充)IDEA项目结构
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (三)uboot源码分析
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET下的多线程编程—1-线程机制概述
  • @Async注解的坑,小心
  • @Mapper作用
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [Android] Implementation vs API dependency
  • [ARM]ldr 和 adr 伪指令的区别
  • [CSS]文字旁边的竖线以及布局知识
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [Everyday Mathematics]20150130
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例