###### Agenda: ###### 12/20 22:00(UTC+8) 12/20 07:00(UTC-7) ###### 公布這次live session題目 ###### 12/20 22:30(UTC+8) 12/20 07:30(UTC-7) ###### 開始逐步給hint ###### 12/20 23:00(UTC+8) 12/20 08:00(UTC-7) ###### 題解 + Q&A ###### 還沒有加入DC伺服器的請記得加入,並去查看#學員驗證頻道進行驗證才可以看到live session的討論區https://discord.gg/WUE3XutPK3 --- #### 本周題目 #### Leetcode 836 #### https://leetcode.com/problems/rectangle-overlap/description/ #### Leetcode 1733 #### https://leetcode.com/problems/minimum-number-of-people-to-teach/description/ --- ### Hint - Leetcode 836 : - hint 1: 兩個長方形 overlap,代表他們有同時蓋到一個點 ---- ### Hint - Leetcode 836 : - hint 1: 兩個長方形 overlap,代表他們有同時蓋到一個點 - hint 2: 想一下長方形重疊有哪幾種情況 ---- ### Hint - Leetcode 836 : - hint 1: 兩個長方形 overlap,代表他們有同時蓋到一個點 - hint 2: 想一下長方形重疊有哪幾種情況 - hint 3: 反過來想想兩個長方形不重疊的話,會有什麼樣的特性 ---- ### Hint - Leetcode 836 : - hint 1:兩個長方形 overlap,代表他們有同時蓋到一個點 - hint 2: 想一下長方形重疊有哪幾種情況 - hint 3: 反過來想想兩個長方形不重疊的話,會有什麼樣的特性 - hint 4: 由於長方形的四個邊都是平行或垂直X Y軸,不重疊的話一定可以用一條平行或垂直X Y軸的線切開。 --- ### Hint - Leetcode 1733 : - hint 1: 先把圖上不重要的資訊刪掉 ---- ### Hint - Leetcode 1733 : - hint 1: 先把圖上不重要的資訊刪掉 - hint 2: 題目要求是只能選一種語言教,不要想一次就把這個語言選出來 ---- ### Hint - Leetcode 1733 : - hint 1: 先把圖上不重要的資訊刪掉 - hint 2: 題目要求是只能選一種語言教,不要想一次就把這個語言選出來 - hint 3: 考慮並嘗試所有的可能性後,最後挑最佳的那個出來。 ---- ### Hint - Leetcode 1733 : - ###### hint 1: 先把圖上不重要的資訊刪掉 - ###### hint 2: 題目要求是只能選一種語言教,不要想一次就把這個語言選出來 - ###### hint 3: 考慮並嘗試所有的可能性後,最後挑最佳的那個出來。 - ###### hint 4: 假設我們決定要教第i種語言,除了已經會的人之外,其他那些人要學 ---- ### Hint - Leetcode 1733 : - ###### hint 1: 先把圖上不重要的資訊刪掉 - ###### hint 2: 題目要求是只能選一種語言教,不要想一次就把這個語言選出來 - ###### hint 3: 考慮並嘗試所有的可能性後,最後挑最佳的那個出來。 - ###### hint 4: 假設我們決定要教第i種語言,除了已經會的人之外,其他那些人要學 - ###### hint 5: 考慮每個friendships,對於要教第i種語言,會分成哪幾種情況 --- ### 題解 ---- ### Leetcode 836 題目 - 給定兩個長方形,判斷他們有沒有重疊,且重疊的面積需要大於0 ---- ### Leetcode 836 題目 - ![image](https://hackmd.io/_uploads/HJ57067X-g.png) ---- ### Leetcode 836 題目 - ![image](https://hackmd.io/_uploads/Hy1BCT7QZx.png) ---- ### Leetcode 836 - 可以發現如果長方形不重疊的話,把他們的XY軸座標分別拿出來,一定有一個軸的座標裡面存在一個值k,使得第一個長方形該座標都<=這個值,而另一個都>=。 ![image](https://hackmd.io/_uploads/rkH7W07mZx.png) ---- ### LeetCode 836 java code ```java //time complexity: O(1) //Extra space complexity: O(1) public boolean isRectangleOverlap(int[] rec1, int[] rec2) { // rec1 x2 <= rec2 x1 if (rec1[2] <= rec2[0]) { return false; } // rec2 x2 <= rec1 x1 if (rec2[2] <= rec1[0]) { return false; } // rec1 y2 <= rec2 y1 if (rec1[3] <= rec2[1]) { return false; } // rec2 y2 <= rec1 y1 if (rec2[3] <= rec1[1]) { return false; } return true; } ``` ---- ### Test case - 重疊的各種情況 - ![image](https://hackmd.io/_uploads/ryNobAmXZx.png) ---- ### Test case - 不重疊的各種情況 - ![image](https://hackmd.io/_uploads/rkJlGAm7bl.png) ---- ### Leetcode 1733 題目 - 有一群人,每個人會一些語言,然後這些人中間會有友誼關係,也就是兩個人可能互相為朋友 - 兩個人要能溝通的話則必須存在一種語言他們兩個人都會 - 目標是要讓每一對朋友都能互相溝通。 - 而要做的事情是,選盡量少的人,並教他們***一種***語言,使得目標成立 ---- ### Leetcode 1733 解法 - 先把有朋友關係但他們已經會同一種語言的朋友關係移除,剩下的則是該對朋友不能互相溝通。 - 假設我們今天選定一個語言教,則每對朋友關係只會有兩種可能性 - 有一個人會這種語言 - 沒有人會這種語言 - 可以發現如果有個人不會這種語言,但他有一個朋友關係不能溝通,那他就必須得學 - 窮舉所有語言,判斷還有幾個人存在有一個朋友沒辦法溝通,而且他還不會這種語言 ---- ### Leetcode 1733 java code ```java //time complexity: O(n*(m+friendships.size())) //Extra space complexity: O(n) public int minimumTeachings(int n, int[][] languages, int[][] friendships) { boolean[] degree = new boolean[languages.length + 1]; for (int[] friendship : friendships) { int u = friendship[0]; int v = friendship[1]; boolean[] language = new boolean[n + 1]; for (int lang : languages[u - 1]) { language[lang] = true; } boolean ok = false; for (int lang : languages[v - 1]) { if (language[lang]) { ok = true; break; } } if (!ok) { degree[u] = true; degree[v] = true; } } int[] languageCnt = new int[n + 1]; int tot = 0; for (int i = 0; i < languages.length; i++) { if (degree[i + 1]) { for (int lang : languages[i]) { languageCnt[lang]++; } tot++; } } int maxCnt = 0; for (int cnt : languageCnt) { maxCnt = Math.max(maxCnt, cnt); } return tot - maxCnt; } ``` ---- ### Test case - 可以不用教任何語言 - 每個人都只會唯一一種語言 - 有人沒有朋友 ---- ### 幫忙填寫個回饋問卷讓我們變得更好 - https://forms.gle/1hYGGuEi4cs1n56bA - ![image](https://hackmd.io/_uploads/r1oAU747Zx.png)
{"title":"1220 live session","description":"Leetcode 1052 :","contributors":"[{\"id\":\"4121b533-a197-44b5-b406-dab56911778d\",\"add\":9363,\"del\":4593,\"latestUpdatedAt\":1766237907314}]"}
    98 views