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

LeetCode刷题day20——贪心

LeetCode刷题day20——贪心

    • 435. 无重叠区间
    • 763. 划分字母区间
      • 分析:
    • 56. 合并区间
      • 分析:

435. 无重叠区间

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠

注意 只在一点上接触的区间是 不重叠的。例如 [1, 2][2, 3] 是不重叠的。

示例 1:

输入: intervals = [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:

输入: intervals = [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:

输入: intervals = [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

提示:

  • 1 <= intervals.length <= 105
  • intervals[i].length == 2
  • -5 * 104 <= starti < endi <= 5 * 104
//easy,跟昨天的射气球一样的
class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {// 这道题完全就是昨天写的射气球的变体,这里只需要求出非重叠区间的最大个数,就能得知需要移除的区间个数int sum = 0;sort(intervals.begin(), intervals.end(),[](vector<int>& a, vector<int>& b) { return a[1] < b[1]; });int line = INT_MIN;for (auto p : intervals) {if (p[0] >= line) {sum++;line = p[1];}}return intervals.size() - sum;}
};

763. 划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s

返回一个表示每个字符串片段的长度的列表。

示例 1:

输入:s = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。 

示例 2:

输入:s = "eccbbbbdec"
输出:[10]

提示:

  • 1 <= s.length <= 500
  • s 仅由小写英文字母组成

分析:

构建字符的最后出现位置

  • 使用一个 index 数组来记录每个字符在字符串中最后一次出现的位置。也就是说,index[i] 存储的是字符 s[i]s 中的最后一个位置。
  • 对于每个字符 s[i],通过第二层循环从 i+1n-1 遍历,查找 s[i] 最后一次出现的索引,更新 index[i]

遍历并确定划分的点

  • 接下来,遍历字符串的每个字符,维护一个 Max 变量记录到当前位置为止的字符的最远位置,即 Max = max(Max, index[i])。这个 Max 表示当前字符及其之前的所有字符可以在 Max 的范围内完全包含。
  • 如果当前索引 iMax 相等,说明从 starti 这一段子串中的字符已经全部处理完,可以作为一个独立的子串,记录其长度并更新 starti
class Solution {
public:vector<int> partitionLabels(string s) {//统计每个字符出现的最后位置,然后从头开始遍历,寻找最大的范围,如果正遍历到最大范围,就是切割点vector<int> index(s.length(), 0);vector<int> result;for (int i = 0; i < s.length(); i++) {char c = s[i];int tmp = i;for (int j = i + 1; j < s.length(); j++) {if (c == s[j])tmp = j;}index[i] = tmp;}int Max = -1;int start = -1;//这里注意,题目求的是长度for (int i = 0; i < s.length(); i++) {Max = max(Max, index[i]);if (Max == i) {result.push_back(i - start);start = i;}}return result;}
};

但是,时间复杂度是O(N^2),因为在确定字母出现的最后位置时,采用了两层循环。可以优化为O(N)。

class Solution {
public:vector<int> partitionLabels(string s) {// 记录每个字符最后出现的位置vector<int> lastIndex(26, -1); // 记录字符a到z的最后出现位置for (int i = 0; i < s.length(); i++) {lastIndex[s[i] - 'a'] = i;}vector<int> result;int start = 0, end = 0;for (int i = 0; i < s.length(); i++) {// 更新end为当前字符的最后出现位置end = max(end, lastIndex[s[i] - 'a']);// 如果当前索引i等于end,说明可以分割if (i == end) {result.push_back(i - start + 1);start = i + 1; // 更新start为下一个分割点的起始位置}}return result;}
};

56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

分析:

这题跟重叠区间,射气球差不多。关键在于判断重叠之后,要怎么处理。

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(),[](vector<int>& x,vector<int>& y) {return x[0]<y[0];});//按左边界排序vector<vector<int>> res;res.push_back(intervals[0]);for(int i=0;i<intervals.size();i++) {if(res.back()[1]>=intervals[i][0]) {//重叠,合并res.back()[1]=max(res.back()[1],intervals[i][1]);}else//不重叠res.push_back(intervals[i]);}return res;}
};

相关文章:

LeetCode刷题day20——贪心

LeetCode刷题day20——贪心 435. 无重叠区间763. 划分字母区间分析&#xff1a; 56. 合并区间分析&#xff1a; 435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 …...

CCF编程能力等级认证GESP—C++3级—20241207

CCF编程能力等级认证GESP—C3级—20241207 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)数字替换打印数字 单选题&#xff08;每题 2 分&#xff0c;共 …...

Microi 吾码:大数据浪潮中的智能领航者

目录 一、大数据时代的挑战与机遇 二、Microi 吾码在大数据存储方面的应用 与分布式文件系统的集成 数据库存储优化 三、Microi 吾码在大数据处理与分析中的应用 数据清洗与转换 数据分析与挖掘 四、Microi 吾码在大数据可视化中的应用 五、Microi 吾码在大数据流式处…...

Lua语言入门 - Lua 数组

Lua 数组 数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;可以是一维数组和多维数组。 在 Lua 中&#xff0c;数组不是一种特定的数据类型&#xff0c;而是一种用来存储一组值的数据结构。 实际上&#xff0c;Lua 中并没有专门的数组类型&#xff…...

gulp应该怎么用,前端批量自动化替换文件

背景 最近公司准备把所有项目中用到的国际化相关的key规范化&#xff0c;原因是: 一直以来公司的app和web端 在针对相同的需求以及相同的国际化语言&#xff0c;需要设置不同的两份国际化文件&#xff0c;难以维护旧版的国际化文件中&#xff0c;存在的大量值重复&#xff0c…...

石岩湿地公园的停车场收费情况

周末石岩湿地公园停车场【967个】小车停车费封顶14元价格还行&#xff0c;我还记得2020年的时候湿地公园还是10元一天封顶。现在的收费情况也是可以的&#xff0c;尤其是周末停车比工作日停车便宜还是很得民心的哈。 车型 收费标准 小车 工作日 高峰时间8:00~20:00 首小时…...

A7157 基于Java+SSM+mysql+jsp的医院挂号系统的设计与实现 源码 文档 配置 全套资料

医院挂号系统 1.项目描述2. 绪论3.项目功能4.界面展示5.源码获取 1.项目描述 摘 要 随着计算机和网络技术的飞速发展&#xff0c;医院管理与互联网的结合也越来越紧密&#xff0c;享受便捷的医疗服务也变成了人民群众关注的重点。通过对医院就诊挂号情况的调查分析&#xff0c…...

数据处理与统计分析——11-Pandas-Seaborn可视化

Seaborn 简介 Seaborn 是一个基于 Matplotlib 的图形可视化 Python 库&#xff0c;提供了高度交互式的接口&#xff0c;使用户能够轻松绘制各种吸引人的统计图表。Seaborn 可以直接使用 Pandas 的 DataFrame 和 Series 数据进行绘图。 1. Seaborn 绘制单变量图 (1) 直方图 h…...

【计算机网络】实验13:运输层端口

实验13 运输层端口 一、实验目的 本次实验旨在验证TCP和IP运输层端口号的作用&#xff0c;深入理解它们在网络通信中的重要性。通过实验&#xff0c;我将探讨端口号如何帮助区分不同的应用程序和服务&#xff0c;使得在同一台主机上能够同时运行多个网络服务而不发生冲突。此…...

STL之适配器(adapters)_下

STL之适配器adapters container adapersstackqueue iterator adaptgersinsert iteratorsreverse iteratorsstream iterators function adapters对返回值进行逻辑判断:not1,not2对参数进行绑定:bind1st, bind2nd用于函数合成&#xff1a;compose1,compose2用于函数指针 ptr_func…...

基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0095 1. 主要功能&#xff1a; 基于51单片机的病床呼叫系统proteus仿…...

安装 Zookeeper 和 Kafka

注意&#xff1a;需要java环境 [roothcss-ecs-2a6a ~]# java -version java version "17.0.12" 2024-07-16 LTS Java(TM) SE Runtime Environment (build 17.0.128-LTS-286) Java HotSpot(TM) 64-Bit Server VM (build 17.0.128-LTS-286, mixed mode, sharing) [roo…...

操作系统输入输出系统知识点

I/O系统的功能、模型和接口 I/O系统的基本功能 隐藏物理设备的细节与设备的无关性提高处理机和I/O设备的利用率对1/0 设备进行控制确保对设备的正确共享 独占设备&#xff0c;进程应互斥地访问这些设备共享设备&#xff0c;在一段时间内允许多个进程同时访问的设备 错误处理 I…...

C语言控制语句与案例

控制语句与案例 1. 选择结构 1.1 if 语句 if 语句用于根据条件执行不同的代码块。最基本的语法形式如下&#xff1a; // 单分支 if (条件) {// 条件为真时执行的代码 }// 双分支 if (条件) {// 条件为真时执行的代码 } else {// 条件为假时执行的代码 }// 多分支 if (条件1…...

JVM的内存布局

Java虚拟机&#xff08;JVM&#xff09;的内存布局可以分为几个主要部分&#xff0c;每个部分都有特定的用途。以下是JVM内存布局的基本组成&#xff1a; 方法区&#xff08;Method Area&#xff09;&#xff1a; 方法区是所有线程共享的内存区域&#xff0c;用于存储已被虚拟机…...

aws codepipeline + github + sonarqube + jenkins实践CI/CD

https://blog.csdn.net/u011564831/article/details/144007981文章浏览阅读1.2k次&#xff0c;点赞31次&#xff0c;收藏21次。本文使用 Jenkins 结合 CodeBuild, CodeDeploy 实现 Serverless 的 CI/CD 工作流&#xff0c;用于自动化发布已经部署 lambda 函数。在 AWS 海外区&a…...

mistralai 部署笔记

目录 mistralai 部署笔记 mistralai 部署笔记 #! /usr/bin/env python3 import os import sys import torch os.chdir(os.path.dirname(os.path.abspath(__file__)))current_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(__file__).split(scri…...

Java——异常机制(上)

1 异常机制本质 (异常在Java里面是对象) (抛出异常&#xff1a;执行一个方法时&#xff0c;如果发生异常&#xff0c;则这个方法生成代表该异常的一个对象&#xff0c;停止当前执行路径&#xff0c;并把异常对象提交给JRE) 工作中&#xff0c;程序遇到的情况不可能完美。比如…...

坐标系,向量_batch及向量点乘部分知识

坐标系 Unity所采用的是左手坐标系。 对于Vector3.forward ,其坐标值为&#xff08;0&#xff0c;0&#xff0c;1&#xff09;&#xff0c;为定值 而transform.forward 该值不固定&#xff0c;本地坐标正方向所在世界坐标系中的方向 向量 向量是终点位置减去起始点位置得…...

【计算机网络】期末速成(2)

部分内容来源于网络&#xff0c;侵删~ 第五章 传输层 概述 传输层提供进程和进程之间的逻辑通信&#xff0c;靠**套接字Socket(主机IP地址&#xff0c;端口号)**找到应用进程。 传输层会对收到的报文进行差错检测。 比特流(物理层)-> 数据帧(数据链路层) -> 分组 / I…...

16张动图解析网络基础原理与应用

16张动图趣味解读网络原理1. 网络基础概念1.1 网络的定义与作用网络存在于日常生活中的每一个角落&#xff0c;电脑、打印机、手机、电视等设备都属于网络设备。通过网络连接这些设备&#xff0c;可以实现数据传输和共享&#xff0c;让工作生活更加便捷。典型的网络应用场景包括…...

Go Context 取消信号机制剖析

Go Context 取消信号机制剖析 在Go语言中&#xff0c;Context是控制并发任务生命周期的重要工具&#xff0c;其取消信号机制尤其关键。通过Context&#xff0c;开发者可以优雅地终止协程、释放资源&#xff0c;避免资源泄漏和无效计算。本文将深入剖析Go Context的取消信号机制…...

3个步骤精通华硕笔记本性能调优:G-Helper完全指南

3个步骤精通华硕笔记本性能调优&#xff1a;G-Helper完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: h…...

手把手玩转Bagging分类——用Matlab实现工业故障检测

Bagging分类 Matlab代码 可用于故障检测等 基于集成算法Bagging的数据分类预测(可以更换为单、多变量时序预测/回归&#xff0c;前私我)&#xff0c;Matlab代码&#xff0c;可直接运行&#xff0c;适合小白新手 [憨笑]程序已经调试好&#xff0c;无需更改代码替换数据集即可运行…...

5步搞定Qwen3-ASR语音识别:支持多语言和方言,快速上手教程

5步搞定Qwen3-ASR语音识别&#xff1a;支持多语言和方言&#xff0c;快速上手教程 语音识别技术正在改变我们与数字世界的交互方式&#xff0c;而Qwen3-ASR以其强大的多语言和方言支持能力脱颖而出。本文将带你用最简单的方式&#xff0c;在5个步骤内完成这个专业级语音识别系…...

Magpie插件管理终极指南:如何让窗口缩放效果始终保持最佳状态

Magpie插件管理终极指南&#xff1a;如何让窗口缩放效果始终保持最佳状态 【免费下载链接】Magpie An all-purpose window upscaler for Windows 10/11. 项目地址: https://gitcode.com/gh_mirrors/mag/Magpie 在Windows窗口缩放领域&#xff0c;Magpie凭借其强大的插件…...

阿里通义Z-Image-Turbo WebUI图像生成模型:从安装到生成,一站式教程

阿里通义Z-Image-Turbo WebUI图像生成模型&#xff1a;从安装到生成&#xff0c;一站式教程 1. 引言 在当今数字内容创作蓬勃发展的时代&#xff0c;AI图像生成技术正以前所未有的速度改变着我们的创作方式。阿里通义实验室推出的Z-Image-Turbo模型&#xff0c;凭借其出色的图…...

Glyph镜像实测分享:低质量图片文字识别,效果出乎意料

Glyph镜像实测分享&#xff1a;低质量图片文字识别&#xff0c;效果出乎意料 1. 引言&#xff1a;低质量图片文字识别的挑战 在日常工作和生活中&#xff0c;我们经常会遇到需要从低质量图片中提取文字的场景。无论是模糊的扫描件、低分辨率的截图&#xff0c;还是光线不佳的…...

三步搞定B站视频转文字:终极高效内容提取方案

三步搞定B站视频转文字&#xff1a;终极高效内容提取方案 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text Bili2text是一款专为B站视频设计的智能文字提取工具…...

Python中数据映射与转换的实现方法

在Python编程中&#xff0c;数据映射与转换是数据处理过程中的核心环节&#xff0c;广泛应用于数据清洗、格式转换、特征工程等多个领域。本文将系统梳理Python中实现数据映射与转换的多种方法&#xff0c;涵盖基础技巧、进阶应用及第三方库的高效实现&#xff0c;帮助开发者构…...