精華區beta Marginalman 關於我們 聯絡資訊
3169. Count Days Without Meetings 給你一個數字day表示要從第一天工作到第幾天,和一個陣列表示meeting的日期區間, 求出你的工作日有幾天不需要meeting。 思路: 1.先依照最早開始的meeting排序。 2.然後用一個資料結構儲存區間,把交集的兩兩合併,最後把空的部份加起來。 Java Code: --------------------------------------------- class Solution { public int countDays(int days, int[][] meetings) { Arrays.sort(meetings, Comparator.comparingInt(x -> x[0])); List<Node> list = new ArrayList<>(); list.add(new Node(meetings[0][0], meetings[0][1])); for (int i = 1; i < meetings.length; i++) { int[] meeting = meetings[i]; Node lastNode = list.get(list.size() - 1); if (meeting[0] > lastNode.last) { list.add(new Node(meeting[0], meeting[1])); } else { lastNode.last = Math.max(lastNode.last, meeting[1]); } } list.add(new Node(days + 1, days + 1)); System.out.println(list); int res = 0; int prevDay = 0; for (Node node : list) { res += Math.max(0, node.first - prevDay - 1); prevDay = node.last; } return res; } } class Node { int first; int last; public Node(int first, int last) { this.first = first; this.last = last; } } --------------------------------------------- 我不知道在寫三小 -- https://i.imgur.com/5xKbxoh.jpeg -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.158.101.161 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1742825764.A.F73.html