391. Number of Airplanes in the Sky

https://www.lintcode.com/problem/number-of-airplanes-in-the-sky/description?_from=ladder&&fromId=4

思路:将起飞时间和降落时间放到同一个数组中, 标识出是起飞还是降落时间, 然后对数组排序,遍历数组即可, 碰到起飞计数器加一, 碰到降落计数器减一. 维护最大值作为答案.

注意降落优先于起飞 可通过flag标记降落为0 上升为1,保证按time相等按flag排序降落为先

/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/ class Point{
int time;
int flag; Point(int t, int s) {
this.time = t;
this.flag = s;
}
public static Comparator<Point> PointComparator = new Comparator<Point>() {
public int compare(Point p1, Point p2) {
if(p1.time == p2.time)
return p1.flag - p2.flag;
else
return p1.time - p2.time;
}
};
} public class Solution {
/**
* @param airplanes: An interval array
* @return: Count of airplanes are in the sky.
*/
public int countOfAirplanes(List<Interval> airplanes) {
// write your code here
List<Point> list = new ArrayList<>(airplanes.size()*2);
for(Interval i:airplanes){
list.add(new Point(i.start,1));
list.add(new Point(i.end,-1));
} Collections.sort(list,Point.PointComparator);
int count=0,ans =1;
for(Point p:list){
if(p.flag==1)
count++;
else
count--; ans = Math.max(ans,count);
} return ans; }
}

919. Meeting Rooms II

https://www.lintcode.com/problem/meeting-rooms-ii/description?_from=ladder&&fromId=4

/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
class Meeting{
int time;
int flag;
public Meeting(int time,int flag){
this.time = time;
this.flag = flag;
} public static Comparator<Meeting> comparator = new Comparator<Meeting>(){
@Override
public int compare(Meeting m1, Meeting m2){
if(m1.time==m2.time){
return m1.flag - m2.flag;
}
return m1.time-m2.time;
}
};
}
public class Solution {
/**
* @param intervals: an array of meeting time intervals
* @return: the minimum number of conference rooms required
*/
public int minMeetingRooms(List<Interval> intervals) {
// Write your code here
if(intervals == null || intervals.size()==0){
return 0;
} List<Meeting> meetings = new ArrayList<>();
for(Interval i:intervals){
meetings.add(new Meeting(i.start,1));
meetings.add(new Meeting(i.end,-1));
} Collections.sort(meetings,Meeting.comparator); int count =0;
int ans =0;
for(Meeting m:meetings){
if(m.flag==1){
count++;
} if(m.flag==-1){
count--;
} ans = Math.max(ans,count);
} return ans;
}
}

821. Time Intersection

https://www.lintcode.com/problem/time-intersection/description?_from=ladder&&fromId=4

/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
class Point{
int time;
int flag; Point(int t, int s) {
this.time = t;
this.flag = s;
}
public static Comparator<Point> PointComparator = new Comparator<Point>() {
public int compare(Point p1, Point p2) {
if(p1.time == p2.time)
return p1.flag - p2.flag;
else
return p1.time - p2.time;
}
};
} public class Solution {
/**
* @param seqA: the list of intervals
* @param seqB: the list of intervals
* @return: the time periods
*/
public List<Interval> timeIntersection(List<Interval> seqA, List<Interval> seqB) {
// Write your code here
List<Interval> res = new ArrayList<>();
if(seqA==null || seqB==null){
return res;
} List<Point> list = new ArrayList<>();
for(Interval i:seqA){
list.add(new Point(i.start,1));
list.add(new Point(i.end,-1));
} for(Interval i:seqB){
list.add(new Point(i.start,1));
list.add(new Point(i.end,-1));
} Collections.sort(list,Point.PointComparator); int start =-1;
int count=0;
for(Point p:list){
if(p.flag==1)
count++;
else
count--; if(count==2){
start = p.time;
} if(count==1 && start!=-1){
res.add(new Interval(start,p.time));
start = -1;
}
} return res;
}
}

131. The Skyline Problem

https://www.lintcode.com/problem/the-skyline-problem/description?_from=ladder&&fromId=4

class Pair implements Comparable{
int index; //坐标
int status; //是up还是down
int height; //高度 Pair(int index,int status,int height){
this.index = index;
this.status = status;
this.height = height;
} //先按坐标,再按status,再按高度
public int compareTo(Object o){
Pair p = (Pair)o;
if(this.index==p.index){
if(this.status==p.status){
return this.height - p.height;
}else{
return this.status - p.status;
}
}else{
return this.index- p.index;
}
} }
public class Solution {
/**
* @param buildings: A list of lists of integers
* @return: Find the outline of those buildings
*/
private static int UP = 0;
private static int DOWN = 1;
public List<List<Integer>> buildingOutline(int[][] buildings) {
// write your code here
List<List<Integer>> res = new ArrayList<>();
if(buildings ==null || buildings.length==0||buildings[0].length==0){
return res;
} List<Pair> pairs = new ArrayList<>();
for(int i=0;i< buildings.length;i++){
pairs.add(new Pair(buildings[i][0],UP,buildings[i][2]));
pairs.add(new Pair(buildings[i][1],DOWN,buildings[i][2]));
} Collections.sort(pairs); TreeMap<Integer,Integer> heightMap = new TreeMap<>(); int preIndex =0;
int preHeight =0;
for(Pair pair:pairs){
if(!heightMap.containsKey(pair.height)){
heightMap.put(pair.height,1);
}else{
if(pair.status==UP){
heightMap.put(pair.height,heightMap.get(pair.height)+1);
}else{
heightMap.put(pair.height,heightMap.get(pair.height)-1);
if(heightMap.get(pair.height)==0){
heightMap.remove(pair.height);
}
}
} int currHeight = heightMap.size()==0?0:heightMap.lastKey(); if(preHeight!=currHeight){
if(preHeight!=0 && preIndex!=pair.index){
res.add(eachSkyLine(preIndex,pair.index,preHeight));
} preHeight = currHeight;
preIndex = pair.index;
}
} return res; } private List<Integer> eachSkyLine(int start,int end,int height){
List<Integer> list = new ArrayList<>();
list.add(start);
list.add(end);
list.add(height);
return list;
}
}

Sweep Line的更多相关文章

  1. sweep line-The Skyline Problem

    2020-01-10 17:51:05 问题描述: 问题求解: 本题是经典的sweep line问题. 对于sweep line问题我们需要考虑的只有两点: 1. 延水平方向 / 时间方向 :时间队列 ...

  2. Leetcode: Find Right Interval

    Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...

  3. [算法]Comparison of the different algorithms for Polygon Boolean operations

    Comparison of the different algorithms for  Polygon Boolean operations. Michael Leonov 1998 http://w ...

  4. 218. The Skyline Problem *HARD* -- 矩形重叠

    A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...

  5. Poly2Tri介绍[转]

    https://blog.csdn.net/xys206006/article/details/83002326 这是Poly2Tri介绍的翻译博文.原文链接:http://sites-final.u ...

  6. Java Algorithm Problems

    Java Algorithm Problems 程序员的一天 从开始这个Github已经有将近两年时间, 很高兴这个repo可以帮到有需要的人. 我一直认为, 知识本身是无价的, 因此每逢闲暇, 我就 ...

  7. Voronoi Diagram——维诺图

    Voronoi图定义   任意两点p 和q 之间的欧氏距离,记作 dist(p, q) .就平面情况而言,我们有           dist(p, q) =  (px-qx)2+ (py-qy)2 ...

  8. 【LeetCode】二叉查找树 binary search tree(共14题)

    链接:https://leetcode.com/tag/binary-search-tree/ [220]Contains Duplicate III (2019年4月20日) (好题) Given ...

  9. BUAA软件工程_结对编程

    1.写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 结对项目作业 课程目标 培养软件开发能力 本作业对实现目标的具体作用 培养结对编程开发项目的能力 ...

随机推荐

  1. Excel应用程序如何创建数据透视表

    原文作者:andreww 原文链接: http://blogs.msdn.com/andreww/archive/2008/07/25/creating-a-pivottable-programmat ...

  2. 在MyEclipse中怎么修改Servlet模板

    原Servlet模板实例 package www.csdn.net.servlet; import java.io.IOException; import java.io.PrintWriter; i ...

  3. npm是干什么的?

    允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用. 其实npm ...

  4. linux 进程通信之 管道和FIFO

    进程间通信:IPC概念 IPC:Interprocess Communication,通过内核提供的缓冲区进行数据交换的机制. IPC通信的方式: pipe:管道(最简单) fifo:有名管道 mma ...

  5. Xshell传输文件

    用rz,sz命令在xshell传输文件 很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz 首先你的Ubuntu需要安装rz.sz(如果没有安装请执 ...

  6. 用pillow和 opencv做透明通道的两图混全(blend)

    from PIL import Image as image foreground = image.open("donkey.png") background = image.op ...

  7. Docker 入门笔记

    Docker 可以理解为一个轻量化的虚拟机, 启动速度快,本身占的资源小 [重要], 容器里是不能保存数据的,容器只要一停止, 所有的数据都会丢失,所以如果重要的数据, 都需要通过配制,把数据保存在 ...

  8. 去掉easyui tree 的默认图标

    $(".tree-icon,.tree-file").removeClass("tree-icon tree-file"); $(".tree-ico ...

  9. WebLogic 两处任意文件上传漏洞动态分析(CVE-2018-2894)

    0x01 前言 CNCERT前几天发公告称发现Oracle公司出品的基于JavaEE结构的中间件WebLogic产品存在一个远程上传漏洞,并得到了厂商的确认,危害程度评分高达9.8分.鉴于厂商已进行了 ...

  10. PostgreSQL 区域设置

    安装PostgreSQL 10.3 windows版本时区域请选择"default locale",安装成功后输入命令: show lc_ctype; show lc_collat ...