算法分析与设计课程17——435. Non-overlapping Intervals
来源:互联网 发布:httppost请求发送json 编辑:程序博客网 时间:2024/06/14 03:36
一、题目描述——原题链接
Given a collection of intervals, find the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.
Note:
You may assume the interval’s end point is always bigger than its start point.
Intervals like [1,2] and [2,3] have borders “touching” but they don’t overlap each other.
Example 1:
Input: [ [1,2], [2,3], [3,4], [1,3] ]Output: 1Explanation: [1,3] can be removed and the rest of intervals are non-overlapping.
Example 2:
Input: [ [1,2], [1,2], [1,2] ]Output: 2Explanation: You need to remove two [1,2] to make the rest of intervals non-overlapping.
Example 3:
Input: [ [1,2], [2,3] ]Output: 0Explanation: You don't need to remove any of the intervals since they're already non-overlapping.
二、题目分析
这就是老师上课讲的排时间的问题,按照如下思路解决:先按照interval的结束时间进行从小到大的排序,再遍历一遍已经排序好的数据,用一个值记录结束时间,当结束时间大于一个interval的开始时间时,将该结束时间置为interval的结束时间。
三、源代码
#include <iostream>#include <vector>#include <algorithm>using namespace std;struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : start(s), end(e) {}};int eraseOverlapIntervals(vector<Interval>& intervals);bool interval_compare(Interval & i1, Interval & i2);int main(){ vector<Interval> intervals; /*input data: [ [1,2], [2,3], [3,4], [1,3] ] [ [1,2], [1,2], [1,2] ] [ [1,2], [2,3] ] */ string input = "[ [1,2], [2,3] ]"; int count = 0; int a; for(int i = 0; i < input.length(); i ++) { if(isdigit(input[i])) { count ++; if(count == 1) a = (int)input[i] - 48; if(count == 2) { Interval temp(a, (int)input[i] - 48); intervals.push_back(temp); count = 0; } } } cout << eraseOverlapIntervals(intervals) << endl;}bool interval_compare(Interval & i1, Interval & i2){ return i1.end < i2.end;}int eraseOverlapIntervals(vector<Interval>& intervals){ int erase_num = 0; sort(intervals.begin(), intervals.end(), interval_compare); int max = -1; for(int i = 0; i < intervals.size(); i ++) { if(intervals[i].start >= max) max = intervals[i].end; else { erase_num ++; cout << intervals[i].start << "," << intervals[i].end << endl; } } return erase_num;}
阅读全文
0 0
- 算法分析与设计课程17——435. Non-overlapping Intervals
- 算法分析与设计week07--435. Non-overlapping Intervals
- 算法系列——Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- 435. Non-overlapping Intervals
- greedy——435. Non-overlapping Intervals[medium]
- Leetcode——134. Gas Station && 435. Non-overlapping Intervals
- leetcode——Non-overlapping Intervals
- mui 订单管理
- # 美团点评CodeM编程大赛-题五
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
- AGV调度方法入门
- mui 上门取件
- 算法分析与设计课程17——435. Non-overlapping Intervals
- 定宽Jquery+AJAX+JSON瀑布流布局
- pyhton_安装MySQL-python
- 数据结构基础温故-1.线性表(下)
- 架构设计:负载均衡层设计方案(1)——负载场景和解决方式
- Java学习笔记---java 四舍五入取整
- js获取html代码中所有图片地址
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- docker使用教程