data-stream-as-disjoint-intervals
https://leetcode.com/problems/data-stream-as-disjoint-intervals/
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ class SummaryRanges { vector<Interval> vec; int find(int val) { int vlen = vec.size(); if (vlen == 0) { return -1; } int begin = 0; int end = vlen - 1; int mid; while (begin <= end) { mid = begin + (end - begin) / 2; // Here <= vs. > if (vec[mid].start > val) { end = mid - 1; } else { begin = mid + 1; } } // Here it's important to return end return end; } public: /** Initialize your data structure here. */ SummaryRanges() { } void addNum(int val) { int idx = find(val); if (idx < 0) { if (vec.size() > 0 && vec[0].start == val+1) { vec[0].start = val; } else { Interval inter(val, val); vec.insert(vec.begin(), inter); } } else { if (vec[idx].end == val-1) { vec[idx].end = val; } else if (vec[idx].end < val-1) { Interval inter(val, val); vec.insert(vec.begin()+idx+1, inter); idx++; } // check latter if (vec.size() > idx+1 && vec[idx+1].start == vec[idx].end + 1) { vec[idx].end = vec[idx+1].end; vec.erase(vec.begin()+idx+1); } } } vector<Interval> getIntervals() { return vec; } }; /** * Your SummaryRanges object will be instantiated and called as such: * SummaryRanges obj = new SummaryRanges(); * obj.addNum(val); * vector<Interval> param_2 = obj.getIntervals(); */
分类:
leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!