代码随想录二刷day36 | 贪心重叠区间之 435. 无重叠区间 763.划分字母区间 56. 合并区间

news2024/10/7 12:19:17

day36

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

435. 无重叠区间

题目链接
解题思路:
按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。
此时问题就是要求非交叉区间的最大个数。
这里记录非交叉区间的个数还是有技巧的,如图:
在这里插入图片描述代码如下:

class Solution {
public:
    // 按照区间右边界排序
    static bool cmp (const vector<int>& a, const vector<int>& b) {
        return a[1] < b[1];
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        if (intervals.size() == 0) return 0;
        sort(intervals.begin(), intervals.end(), cmp);
        int count = 1; // 记录非交叉区间的个数
        int end = intervals[0][1]; // 记录区间分割点
        for (int i = 1; i < intervals.size(); i++) {
            if (end <= intervals[i][0]) {
                end = intervals[i][1];
                count++;
            }
        }
        return intervals.size() - count;
    }
};


763.划分字母区间

题目链接
解题思路
可以分为如下两步:

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
    在这里插入图片描述代码如下:
class Solution {
public:
    vector<int> partitionLabels(string S) {
        int hash[27] = {0}; // i为字符,hash[i]为字符出现的最后位置
        for (int i = 0; i < S.size(); i++) { // 统计每一个字符最后出现的位置
            hash[S[i] - 'a'] = i;
        }
        vector<int> result;
        int left = 0;
        int right = 0;
        for (int i = 0; i < S.size(); i++) {
            right = max(right, hash[S[i] - 'a']); // 找到字符出现的最远边界
            if (i == right) {
                result.push_back(right - left + 1);
                left = i + 1;
            }
        }
        return result;
    }
};

56. 合并区间

题目链接
解题思路: 先排序,让所有的相邻区间尽可能的重叠在一起
按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1]intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。(本题相邻区间也算重贴,所以是<=)
在这里插入图片描述其实就是用合并区间后左边界和右边界,作为一个新的区间,加入到result数组里就可以了。如果没有合并就把原区间加入到result数组。

C++代码如下:

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> result;
        if (intervals.size() == 0) return result; // 区间集合为空直接返回
        // 排序的参数使用了lambda表达式
        sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];});

        // 第一个区间就可以放进结果集里,后面如果重叠,在result上直接合并
        result.push_back(intervals[0]); 

        for (int i = 1; i < intervals.size(); i++) {
            if (result.back()[1] >= intervals[i][0]) { // 发现重叠区间
                // 合并区间,只更新右边界就好,因为result.back()的左边界一定是最小值,因为我们按照左边界排序的
                result.back()[1] = max(result.back()[1], intervals[i][1]); 
            } else {
                result.push_back(intervals[i]); // 区间不重叠 
            }
        }
        return result;
    }
};

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

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

相关文章

深入理解Java虚拟机jvm-内存溢出OO-本机直接内存溢出(Direct Memory) java.lang.OutOfMemoryError

本机直接内存溢出 示例虚拟机参数输出 示例 public class DirectMemoryOOM {private static final int _1MB 1024 * 1024;public static void main(String[] args) throws IllegalAccessException {Field unsafeField Unsafe.class.getDeclaredFields()[0];unsafeField.setA…

Java编程语言的优势、特点及应用详解

目录 1. 简单易学2. 跨平台性3. 强大的生态系统4. 高性能5. 安全性6. 广泛应用领域总结 Java是一种广泛应用于软件开发领域的高级编程语言。它具有许多独特的优势和特点&#xff0c;使其成为众多开发者和企业的首选。本篇博文将深入探讨Java的优势、特点以及在不同应用领域中的…

若依——限流(rateLimiter)(lua脚本与令牌桶)

在原版若依当中使用了lua脚本进行限流 注意这里进行了bean的托管&#xff0c;因此我们才能使用limitScript 关于lua脚本的解释 在若依的Plus版本当中&#xff0c;结合了Redisson使用令牌桶进行限流。由于Redisson已经封装好了&#xff0c;使用起来比较简单&#xff0c;更多…

LeetCode刷题 | 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…

excel 信息批量转PPT

前言 在工作中&#xff0c;往往遇到大量数据的统计工作&#xff0c;耗时耗力&#xff0c;我们通常把这些信息用excel做成表单信息。除了统计分析&#xff0c;还面临汇报降解&#xff0c;这时候需要将excel转为PPT进行汇报&#xff0c;如果一个一个复制粘贴&#xff0c;那真的会…

compose中实现拍照和选取相册功能兼容android 13+

compose中实现拍照和选取相册功能兼容android 13 效果图添加引用修改AndroidManifest.xml定义拍照和选取相册的ResultContract调用拍照和选择相册的compose方法使用 效果图 添加引用 //用于compose权限的使用 implementation("com.google.accompanist:accompanist-permis…

【JDBC】如何保护 JDBC 应用程序免受 SQL 注入的影响

本文仅供学习参考&#xff01; 相关教程地址&#xff1a; https://zhuanlan.zhihu.com/p/397815893 https://www.freebuf.com/articles/web/339118.html https://www.developer.com/design/how-to-protect-a-jdbc-application-against-sql-injection/ 概述 在关系数据库管理系…

Android应用程序开发需要哪些编程语言?

开发一款Android上的应用程序通常需要以下编程语言&#xff1a; Java&#xff1a;Java是Android开发的主要编程语言。几乎所有的Android应用程序都使用Java进行核心开发。你可以使用Java编写应用程序的业务逻辑、界面设计和数据处理等。 刚好我这里有嵌入式、plc、单片机的资料…

使用 Jetpack Compose 构建 RadioButton

欢迎阅读本篇关于使用 Jetpack Compose 构建 RadioButton&#xff08;单选按钮&#xff09;的博客。Jetpack Compose 是 Google 发布的现代化 UI 工具包&#xff0c;用于构建 Android 界面。它的声明式设计使得 UI 开发更加简洁直观。 一、什么是 RadioButton&#xff1f; Rad…

leecode-全排列

题目 题目链接 分析 两个函数知识点&#xff1a; next_permutation(start,end);输出所有比当前排列 排列大的排列 prev_permutation(start,end);输出所有比当前排列 排列小的排列 AC代码 #include <iostream> #include <algorithm> class Solution { publi…

记一次ceph启动故障

无法使用ceph -s查看状态 ceph-mon和ceph-mgr正常启动 ceph-osdceph-osd.service无法启动 /var/log/ceph/ceph-mon-***.log报以下错误 原因:集群时钟不同步,差了127s远远超过配置的可接受时间误差5s故该mon服务无法与集群中其他节点交流 解决方案: timedatectl status #查…

diy遥控飞机模型的基本要点-2

电动马达 在改装电动遥控飞机时&#xff0c;选择合适的马达和螺旋桨是非常重要的。以下是一些建议&#xff1a; 马达选择&#xff1a;选择适合的马达需要考虑飞机的重量、翼展和预期性能。对于48cm翼展的手抛泡沫飞机&#xff0c;一般来说&#xff0c;你可以选择一款轻量级的无…

Spring Boot 中的事务只读属性是什么,原理,如何使用

Spring Boot 中的事务只读属性是什么&#xff0c;原理&#xff0c;如何使用 简介 在开发过程中&#xff0c;事务是一个非常重要的概念。在 Spring Boot 中&#xff0c;事务是通过 AOP 机制来实现的&#xff0c;可以很方便地进行管理。其中&#xff0c;只读事务是一种特殊的事…

阿里P7的消息中心架构设计笔记

前言 最近我们在重构消息中心&#xff0c;关于设计上的部分记录一下笔记&#xff0c;希望能够帮助到正在做类似设计的。另外我创建了一个高级研发的笔记分享群&#xff0c;免费加入&#xff0c;有兴趣的可以在文章底部扫描二维码加入 需求 我们的消息中心主要服务于如下场景…

C++类与对象(下)

类与对象&#xff08;下&#xff09; 1.再谈构造函数1.1构造函数体赋值1.2初始化列表1.3explicit关键字 2.static成员2.1概念2.2特性 3.有元3.1有元函数3.2有元类 4.内部类4.1概念及特性 5.匿名对象6.拷贝对象时的一些编译器优化7. 再次理解类和对象 1.再谈构造函数 1.1构造函…

Acer宏碁掠夺者Predator战斧300 PH315-53原厂Windows10系统工厂模式,恢复安装原装OEM预装系统

Acer宏基笔记本电脑&#xff0c;Acer宏碁Predator掠夺者战斧300 PH315-53原装出厂Windows10系统 系统自带所有驱动、Office办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access、PredatorSense风扇键盘背光控制中心等预装程序 所需要工具&#xff1a;32G或以上的U盘…

Django框架实现简单的接口开发

前提创建一个Django项目&#xff0c;目录如下&#xff1a; Django框架上进行GET请求接口开发示例: 1.在上面项目结构目录Template下&#xff0c;新建一个login.html页面&#xff0c;定义表单提交请求的方式为post&#xff0c;具体代码如下。 <!DOCTYPE HTML> <html …

LSTM

其中一个门用来从记忆单元中输出条目&#xff0c;将其称为输出门&#xff08;output gate&#xff09;&#xff1b;另外一个门用来决定何时将数据读入记忆单元&#xff0c;将其称为输入门&#xff08;input gate&#xff09;&#xff1b;同时还需要一种机制来重置单元的内容&am…

Android Jetpack Compose之RadioGroup的使用

Android Jetpack Compose是一个现代化的UI工具包&#xff0c;帮助开发者以声明式的方式构建出美观且功能强大的Android应用。在本文中&#xff0c;我们将详细介绍其中的一个重要组件——RadioGroup。 一. RadioGroup简介 Jetpack Compose中并没有像传统View系统中那样直接提供…

刷题遇到的问题

前言&#xff1a;好记性不如烂笔头&#xff0c;在刷题的时候遇到了如下代码&#xff0c;最终运行结果与我想的答案有所不同&#xff0c;在此记录一下方便下次理解 1、变量提升与函数声明 var time new Date(); function fx() {console.log(time); // undefinedif (false) {…