代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间、56.合并区间

贪心

文章目录


一、无重叠区间

求移除重叠区间,等于所有区间减去重叠区间,也就是重叠空间个数

cpp 复制代码
class Solution {
public:

    static bool cmp (vector<int>& a, vector<int>& b) {
        return a[0] < b[0];
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), cmp);
        //计算重叠区间的个数,即最终答案
        int count = 0;
        for (int i = 1; i < intervals.size(); i++) {
            if (intervals[i][0] < intervals[i-1][1]) {
                count++;
                intervals[i][1] = min (intervals[i][1], intervals[i-1][1]);
            }
        }
        return count;
    }
};

二、划分字母区间

同一个字母只能出现在一个区间内,所以可以根据当前字母出现的最大下标作为区间结尾
1.遍历求出每个字母的最大出现下标
2.再次遍历,如果当前遍历的下标等于该字母的最大下标,即划分

cpp 复制代码
class Solution {
public:
    vector<int> partitionLabels(string s) {
        int right = 0;
        int left = 0;
        int nums[27] = {0};
        
        for (int i = 0; i < s.size(); i++) { // 统计每一个字符最后出现的位置
            nums[s[i] - 'a'] = i;
        }

        vector<int>result;
        for (int i = 0; i < s.size(); i++) {
            right = max(right, nums[s[i] - 'a']);
            if (i == right) {
                result.push_back(right - left + 1);
                left = i + 1;
            }
        }
        return result;
    }
};

三、合并区间

同前几题,都是判断重叠区间,与之不同的是此题要求合并重叠区间
判断是否与前一区间重叠,如果重叠则取最大值右边界,加入到结果集中,否则直接加入

cpp 复制代码
class Solution {
public:
    
    static bool cmp (vector<int>& a, vector<int>& b) {
        return a[0] < b[0];
    }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), cmp);
        
        vector<vector<int>>result;
        result.push_back(intervals[0]);
        for (int i = 1; i < intervals.size(); i++) {
            if (result.back()[1] >= intervals[i][0]) {
                result.back()[1] = max(result.back()[1], intervals[i][1]);
            }
            else result.push_back(intervals[i]);
        }
        return result;
    }
};

总结

前几天一直在忙导师项目,太累了,慢慢补吧,加油!

学习时间90min。

学习资料:《代码随想录》

相关推荐
复杂网络2 小时前
AI 不睡觉,但它比你更会做实验
算法
贵慜_Derek2 小时前
MAI-04|干净数据在工程上意味着什么:MAI 预训练数据治理
人工智能·算法·llm
郝学胜_神的一滴3 小时前
CMake 037:宏传递流转机制与C++编译特性跨平台适配指南
c++·cmake
vibecoding日记20 小时前
双非如何快速入职字节等大厂大模型?真实案例分析:推理优化和投机解码
算法·求职·大模型工程师
yszaygr21381 天前
Verilog参数化游程编码RLE模块
算法
望易1 天前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络1 天前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
apocelipes2 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境