LeetCode 第 198 场周赛(434/5778,前7.51%)
文章目錄
- 1. 比賽結果
- 2. 題目
- 1. LeetCode 5464. 換酒問題 easy
- 2. LeetCode 5465. 子樹中標簽相同的節點數 medium
- 3. LeetCode 5466. 最多的不重疊子字符串 medium
- 4. LeetCode 5467. 找到最接近目標值的函數值 hard
1. 比賽結果
第二題圖的邊給的不一定按順序的,我按有序的做,錯誤一次,第三題好難跳過了,第四題暴力超時,貪心不對。繼續加油!
全國排名: 434 / 5778,7.51%;全球排名:1138 / 15151,7.51%
2. 題目
1. LeetCode 5464. 換酒問題 easy
題目鏈接
小區便利店正在促銷,用 numExchange 個空酒瓶可以兌換一瓶新酒。
你購入了 numBottles 瓶酒。
如果喝掉了酒瓶中的酒,那么酒瓶就會變成空的。
請你計算 最多 能喝到多少瓶酒。
示例 1:
示例 2:
解題:
class Solution { public:int numWaterBottles(int numBottles, int numExchange) {int sum = 0, empty = 0;//喝的酒、空瓶子while(numBottles || empty >= numExchange)//有的喝,或還可以換{sum += numBottles;//喝掉empty += numBottles;//空瓶子多了numBottles = empty/numExchange;//能換幾瓶酒empty -= numBottles*numExchange;//還剩幾個空瓶子}return sum;} };還看見了個超強的數學解法:
class Solution { public:int numWaterBottles(int numBottles, int numExchange) {return (numBottles * numExchange-1)/(numExchange-1);} };2. LeetCode 5465. 子樹中標簽相同的節點數 medium
題目鏈接
給你一棵樹(即,一個連通的無環無向圖),這棵樹由編號從 0 到 n - 1 的 n 個節點組成,且恰好有 n - 1 條 edges 。
樹的根節點為節點 0 ,樹上的每一個節點都有一個標簽,也就是字符串 labels 中的一個小寫字符(編號為 i 的 節點的標簽就是 labels[i] )
邊數組 edges 以 edges[i] = [ai, bi] 的形式給出,該格式表示節點 ai 和 bi 之間存在一條邊。
返回一個大小為 n 的數組,其中 ans[i] 表示第 i 個節點的子樹中與節點 i 標簽相同的節點數。
樹 T 中的子樹是由 T 中的某個節點及其所有后代節點組成的樹。
示例 1:
示例 2:
示例 3:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/number-of-nodes-in-the-sub-tree-with-the-same-label
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解題:
class Solution {unordered_map<int,unordered_set<int>> m;vector<int> ans; public:vector<int> countSubTrees(int n, vector<vector<int>>& edges, string labels) {for(auto& e : edges){m[e[0]].insert(e[1]);m[e[1]].insert(e[0]);}ans.resize(n);vector<bool> vis(n,false);dfs(0,labels,vis);return ans;}vector<int> dfs(int root, string& labels,vector<bool> &vis){vector<int> count(26,0), temp;vis[root] = true;//訪問過了for(auto it = m[root].begin(); it != m[root].end(); ++it){if(vis[*it])continue;temp = dfs(*it,labels,vis);for(int i = 0; i < 26; ++i)count[i] += temp[i];//把子樹的字符計數更新到本節點}ans[root] = ++count[labels[root]-'a'];//加上自己的return count;//返回字符的計數} };1676 ms 286.7 MB
3. LeetCode 5466. 最多的不重疊子字符串 medium
題目鏈接
給你一個只包含小寫字母的字符串 s ,你需要找到 s 中最多數目的非空子字符串,滿足如下條件:
- 這些字符串之間互不重疊,也就是說對于任意兩個子字符串 s[i..j] 和 s[k..l] ,要么 j < k 要么 i > l 。
- 如果一個子字符串包含字符 c ,那么 s 中所有 c 字符都應該在這個子字符串中。
請你找到滿足上述條件的最多子字符串數目。
如果有多個解法有相同的子字符串數目,請返回這些子字符串總長度最小的一個解。可以證明最小總長度解是唯一的。
請注意,你可以以 任意 順序返回最優解的子字符串。
示例 1: 輸入:s = "adefaddaccc" 輸出:["e","f","ccc"] 解釋:下面為所有滿足第二個條件的子字符串: ["adefaddaccc""adefadda","ef","e","f","ccc", ] 如果我們選擇第一個字符串,那么我們無法再選擇其他任何字符串,所以答案為 1 。 如果我們選擇 "adefadda" ,剩下子字符串中我們只可以選擇 "ccc" , 它是唯一不重疊的子字符串,所以答案為 2 。 同時我們可以發現,選擇 "ef" 不是最優的, 因為它可以被拆分成 2 個子字符串。 所以最優解是選擇 ["e","f","ccc"] ,答案為 3 。 不存在別的相同數目子字符串解。示例 2: 輸入:s = "abbaccd" 輸出:["d","bb","cc"] 解釋:注意到解 ["d","abba","cc"] 答案也為 3 , 但它不是最優解,因為它的總長度更長。提示: 1 <= s.length <= 10^5 s 只包含小寫英文字母。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-number-of-non-overlapping-substrings
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解題:
待補
4. LeetCode 5467. 找到最接近目標值的函數值 hard
題目鏈接
Winston 構造了一個如上所示的函數 func 。
他有一個整數數組 arr 和一個整數 target ,他想找到讓 |func(arr, l, r) - target| 最小的 l 和 r 。
請你返回 |func(arr, l, r) - target| 的最小值。
請注意, func 的輸入參數 l 和 r 需要滿足 0 <= l, r < arr.length 。
示例 1: 輸入:arr = [9,12,3,7,15], target = 5 輸出:2 解釋:所有可能的 [l,r] 數對包括 [[0,0],[1,1],[2,2],[3,3], [4,4],[0,1],[1,2],[2,3],[3,4],[0,2],[1,3],[2,4],[0,3], [1,4],[0,4]], Winston 得到的相應結果為 [9,12,3,7,15,8,0,3,7,0,0,3,0,0,0] 。 最接近 5 的值是 7 和 3,所以最小差值為 2 。示例 2: 輸入:arr = [1000000,1000000,1000000], target = 1 輸出:999999 解釋:Winston 輸入函數的所有可能 [l,r] 數對得到的函數值都為 1000000 , 所以最小差值為 999999 。示例 3: 輸入:arr = [1,2,4,8,16], target = 0 輸出:0提示: 1 <= arr.length <= 10^5 1 <= arr[i] <= 10^6 0 <= target <= 10^7來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-a-value-of-a-mysterious-function-closest-to-target
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解題:
- 比賽超時解 ,17 / 26 個通過測試用例,區間dp解法
待更新正解。
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 第 198 场周赛(434/5778,前7.51%)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 718. 最长重复子数
- 下一篇: LeetCode 256. 粉刷房子(D