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

代码随想录算法训练营第36天| 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. 合并区间

力扣题目链接

代码

示例代码
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.lryc.cn/news/337846.html

相关文章:

  • SpringBoot整合Nacos
  • vue3 浅学
  • 三小时使用鸿蒙OS模仿羊了个羊,附源码
  • 如何使用 ArcGIS Pro 制作热力图
  • SpringBoot之集成Redis
  • mybatis-plus与mybatis同时使用别名问题
  • MySQL基础知识——MySQL日志
  • uniapp 地图分幅网格生成 小程序基于map组件
  • python项目练习——22、人脸识别软件
  • Linux中账号登陆报错access denied
  • python语言之round(num, n)小数四舍五入
  • 安全风险攻击面管理如何提升企业网络弹性?
  • 常用的几款性能测试软件
  • 谷歌google浏览器无法更新Chrome至最新版本怎么办?浏览器Chrome无法更新至最新版本
  • 认识异常(1)
  • C++矩阵
  • 解锁智能未来:用Ollama开启你的本地AI之旅
  • CSS实现卡片在鼠标悬停时突出效果
  • GPT建模与预测实战
  • 传统方法(OpenCV)_车道线识别
  • Git以及Gitlab的快速使用文档
  • MyBatis Interceptor拦截器高级用法
  • Python学习入门(2)——进阶功能
  • 华为改进点
  • 分布式技术---------------消息队列中间件之 Kafka
  • BGP扩展知识总结
  • 华为OD-C卷-按身高和体重排队[100分]
  • 云原生(八)、Kubernetes基础(一)
  • Linux 系统解压缩文件
  • linux如何使 CPU使用率保持在指定百分比?