日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 第 198 场周赛(434/5778,前7.51%)

發(fā)布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 第 198 场周赛(434/5778,前7.51%) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 比賽結果
    • 2. 題目
      • 1. LeetCode 5464. 換酒問題 easy
      • 2. LeetCode 5465. 子樹中標簽相同的節(jié)點數(shù) medium
      • 3. LeetCode 5466. 最多的不重疊子字符串 medium
      • 4. LeetCode 5467. 找到最接近目標值的函數(shù)值 hard

1. 比賽結果

第二題圖的邊給的不一定按順序的,我按有序的做,錯誤一次,第三題好難跳過了,第四題暴力超時,貪心不對。繼續(xù)加油!

全國排名: 434 / 5778,7.51%;全球排名:1138 / 15151,7.51%

2. 題目

1. LeetCode 5464. 換酒問題 easy

題目鏈接

小區(qū)便利店正在促銷,用 numExchange 個空酒瓶可以兌換一瓶新酒。
你購入了 numBottles 瓶酒。

如果喝掉了酒瓶中的酒,那么酒瓶就會變成空的。

請你計算 最多 能喝到多少瓶酒

示例 1:

輸入:numBottles = 9, numExchange = 3 輸出:13 解釋:你可以用 3 個空酒瓶兌換 1 瓶酒。 所以最多能喝到 9 + 3 + 1 = 13 瓶酒。

示例 2:

輸入:numBottles = 15, numExchange = 4 輸出:19 解釋:你可以用 4 個空酒瓶兌換 1 瓶酒。 所以最多能喝到 15 + 3 + 1 = 19 瓶酒。示例 3: 輸入:numBottles = 5, numExchange = 5 輸出:6示例 4: 輸入:numBottles = 2, numExchange = 3 輸出:2提示: 1 <= numBottles <= 100 2 <= numExchange <= 100

解題:

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;} };

還看見了個超強的數(shù)學解法:

class Solution { public:int numWaterBottles(int numBottles, int numExchange) {return (numBottles * numExchange-1)/(numExchange-1);} };

2. LeetCode 5465. 子樹中標簽相同的節(jié)點數(shù) medium

題目鏈接
給你一棵樹(即,一個連通的無環(huán)無向圖),這棵樹由編號從 0 到 n - 1 的 n 個節(jié)點組成,且恰好有 n - 1 條 edges 。
樹的根節(jié)點為節(jié)點 0 ,樹上的每一個節(jié)點都有一個標簽,也就是字符串 labels 中的一個小寫字符(編號為 i 的 節(jié)點的標簽就是 labels[i] )

邊數(shù)組 edges 以 edges[i] = [ai, bi] 的形式給出,該格式表示節(jié)點 ai 和 bi 之間存在一條邊。

返回一個大小為 n 的數(shù)組,其中 ans[i] 表示第 i 個節(jié)點的子樹中與節(jié)點 i 標簽相同的節(jié)點數(shù)。

樹 T 中的子樹是由 T 中的某個節(jié)點及其所有后代節(jié)點組成的樹。

示例 1:

輸入:n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = "abaedcd" 輸出:[2,1,1,1,1,1,1] 解釋:節(jié)點 0 的標簽為 'a' ,以 'a' 為根節(jié)點的子樹中, 節(jié)點 2 的標簽也是 'a' ,因此答案為 2 。 注意樹中的每個節(jié)點都是這棵子樹的一部分。 節(jié)點 1 的標簽為 'b' ,節(jié)點 1 的子樹包含節(jié)點 145, 但是節(jié)點 45 的標簽與節(jié)點 1 不同,故而答案為 1(即,該節(jié)點本身)。

示例 2:

輸入:n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb" 輸出:[4,2,1,1] 解釋:節(jié)點 2 的子樹中只有節(jié)點 2 ,所以答案為 1 。 節(jié)點 3 的子樹中只有節(jié)點 3 ,所以答案為 1 。 節(jié)點 1 的子樹中包含節(jié)點 12 ,標簽都是 'b' ,因此答案為 2 。 節(jié)點 0 的子樹中包含節(jié)點 0123,標簽都是 'b',因此答案為 4

示例 3:

輸入:n = 5, edges = [[0,1],[0,2],[1,3],[0,4]], labels = "aabab" 輸出:[3,2,1,1,1]示例 4: 輸入:n = 6, edges = [[0,1],[0,2],[1,3],[3,4],[4,5]], labels = "cbabaa" 輸出:[1,2,1,1,2,1]示例 5: 輸入:n = 7, edges = [[0,1],[1,2],[2,3],[3,4],[4,5],[5,6]], labels = "aaabaaa" 輸出:[6,5,4,1,3,2,1]提示: 1 <= n <= 10^5 edges.length == n - 1 edges[i].length == 2 0 <= ai, bi < n ai != bi labels.length == n labels 僅由小寫英文字母組成

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/number-of-nodes-in-the-sub-tree-with-the-same-label
著作權歸領扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權,非商業(yè)轉(zhuǎn)載請注明出處。


解題:

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];//把子樹的字符計數(shù)更新到本節(jié)點}ans[root] = ++count[labels[root]-'a'];//加上自己的return count;//返回字符的計數(shù)} };

1676 ms 286.7 MB

3. LeetCode 5466. 最多的不重疊子字符串 medium

題目鏈接

給你一個只包含小寫字母的字符串 s ,你需要找到 s 中最多數(shù)目的非空子字符串,滿足如下條件:

  • 這些字符串之間互不重疊,也就是說對于任意兩個子字符串 s[i..j] 和 s[k..l] ,要么 j < k 要么 i > l 。
  • 如果一個子字符串包含字符 c ,那么 s 中所有 c 字符都應該在這個子字符串中。

請你找到滿足上述條件的最多子字符串數(shù)目
如果有多個解法有相同的子字符串數(shù)目,請返回這些子字符串總長度最小的一個解。可以證明最小總長度解是唯一的。

請注意,你可以以 任意 順序返回最優(yōu)解的子字符串。

示例 1: 輸入:s = "adefaddaccc" 輸出:["e","f","ccc"] 解釋:下面為所有滿足第二個條件的子字符串: ["adefaddaccc""adefadda","ef","e","f","ccc", ] 如果我們選擇第一個字符串,那么我們無法再選擇其他任何字符串,所以答案為 1 。 如果我們選擇 "adefadda" ,剩下子字符串中我們只可以選擇 "ccc" , 它是唯一不重疊的子字符串,所以答案為 2 。 同時我們可以發(fā)現(xiàn),選擇 "ef" 不是最優(yōu)的, 因為它可以被拆分成 2 個子字符串。 所以最優(yōu)解是選擇 ["e","f","ccc"] ,答案為 3 。 不存在別的相同數(shù)目子字符串解。示例 2: 輸入:s = "abbaccd" 輸出:["d","bb","cc"] 解釋:注意到解 ["d","abba","cc"] 答案也為 3 , 但它不是最優(yōu)解,因為它的總長度更長。提示: 1 <= s.length <= 10^5 s 只包含小寫英文字母。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-number-of-non-overlapping-substrings
著作權歸領扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權,非商業(yè)轉(zhuǎn)載請注明出處。


解題:

待補

4. LeetCode 5467. 找到最接近目標值的函數(shù)值 hard

題目鏈接


Winston 構造了一個如上所示的函數(shù) func 。
他有一個整數(shù)數(shù)組 arr 和一個整數(shù) target ,他想找到讓 |func(arr, l, r) - target| 最小的 l 和 r 。

請你返回 |func(arr, l, r) - target| 的最小值。

請注意, func 的輸入?yún)?shù) l 和 r 需要滿足 0 <= l, r < arr.length 。

示例 1: 輸入:arr = [9,12,3,7,15], target = 5 輸出:2 解釋:所有可能的 [l,r] 數(shù)對包括 [[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 的值是 73,所以最小差值為 2 。示例 2: 輸入:arr = [1000000,1000000,1000000], target = 1 輸出:999999 解釋:Winston 輸入函數(shù)的所有可能 [l,r] 數(shù)對得到的函數(shù)值都為 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
著作權歸領扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權,非商業(yè)轉(zhuǎn)載請注明出處。


解題:

  • 比賽超時解 ,17 / 26 個通過測試用例,區(qū)間dp解法
class Solution { public:int closestToTarget(vector<int>& arr, int t) {int minans = INT_MAX;int i, j, len, n = arr.size();vector<vector<int>> dp(n,vector<int>(n,0));for(i = 0; i < n; ++i){dp[i][i] = arr[i];minans = min(minans, abs(dp[i][i]-t));}for(len = 0; len < n; ++len){for(i = 0; i < n ; ++i){j = i+len;if(j >= n)break;if(dp[i][j]==0){minans = min(minans, t);break;}if(j+1 < n){dp[i][j+1] = dp[i][j]&arr[j+1];minans = min(minans, abs(dp[i][j+1]-t));}if(i-1 >= 0){dp[i-1][j] = dp[i][j]&arr[i-1];minans = min(minans, abs(dp[i-1][j]-t));}if(minans == 0)return 0;}}return minans;} };

待更新正解。


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 第 198 场周赛(434/5778,前7.51%)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。