perfect-rectangle
https://leetcode.com/problems/perfect-rectangle/ // https://discuss.leetcode.com/topic/55944/o-n-log-n-sweep-line-solution public class Solution { public class Column implements Comparable<Column> { int xs; int[] rect; public Column(int xs, int[] rect) { this.xs = xs; this.rect = rect; } public int compareTo(Column that) { if (this.xs != that.xs) { return this.xs - that.xs; } return this.rect[0] - that.rect[0]; } } public boolean isRectangleCover(int[][] rectangles) { PriorityQueue<Column> pq = new PriorityQueue<Column>(); int[] border = {Integer.MAX_VALUE, Integer.MIN_VALUE}; for (int[] rect : rectangles) { Column c1 = new Column(rect[0], rect); Column c2 = new Column(rect[2], rect); pq.add(c1); pq.add(c2); if (rect[1] < border[0]) { border[0] = rect[1]; } if (rect[3] > border[1]) { border[1] = rect[3]; } } TreeSet<int[]> tset = new TreeSet<int[]> (new Comparator<int[]>(){ public int compare(int []rect1, int[]rect2) { if (rect1[3] <= rect2[1]) { return -1; } else if (rect1[1] >= rect2[3]) { return 1; } else { return 0; } } }); int yRange = 0; while (!pq.isEmpty()) { int xs = pq.peek().xs; while (!pq.isEmpty() && pq.peek().xs == xs) { Column col = pq.poll(); int[] rect = col.rect; if (xs == rect[2]) { tset.remove(rect); yRange -= rect[3] - rect[1]; } else { // xs == rect[0] if (!tset.add(rect)) { // intersect return false; } yRange += rect[3] - rect[1]; } } // if pq.isEmpty(), the right line, no need to check if (!pq.isEmpty() && yRange != border[1] - border[0]) { return false; } } return true; } }
【推荐】国内首个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 让容器管理更轻松!