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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 第 26 场双周赛(363/1971,前18.4%)

發布時間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 第 26 场双周赛(363/1971,前18.4%) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 比賽結果
    • 2. 題目
      • 1. LeetCode 5396. 連續字符 easy
      • 2. LeetCode 5397. 最簡分數 medium
      • 3. LeetCode 5398. 統計二叉樹中好節點的數目 medium
      • 4. LeetCode 5399. 數位成本和為目標值的最大數字 hard

1. 比賽結果

做出來了 1、2、3 題,19分鐘做出來3題(拼手速),第4題回溯超時1把,然后想到了是背包DP,沒寫出來,繼續加油!沖啊!

全國排名:363 / 1971,18.4%;全球排名:1291 / 7795,16.6%


2. 題目

1. LeetCode 5396. 連續字符 easy

題目鏈接
給你一個字符串 s ,字符串的「能量」定義為:只包含一種字符的最長非空子字符串的長度。

請你返回字符串的能量。

示例 1: 輸入:s = "leetcode" 輸出:2 解釋:子字符串 "ee" 長度為 2 ,只包含字符 'e' 。示例 2: 輸入:s = "abbcccddddeeeeedcba" 輸出:5 解釋:子字符串 "eeeee" 長度為 5 ,只包含字符 'e' 。示例 3: 輸入:s = "triplepillooooow" 輸出:5示例 4: 輸入:s = "hooraaaaaaaaaaay" 輸出:11示例 5: 輸入:s = "tourist" 輸出:1提示: 1 <= s.length <= 500 s 只包含小寫英文字母。

解答:

  • 跟前一個比較,相等的話,計數+1,不等,計數置1
  • 記錄最大計數
class Solution { public:int maxPower(string s) {int i, count = 0, maxc = 0;char prev = '*';for(i = 0; i < s.size(); ++i){if(prev == s[i])count++;elsecount = 1;maxc = max(count, maxc);prev = s[i];}return maxc;} };

2. LeetCode 5397. 最簡分數 medium

題目鏈接
給你一個整數 n ,請你返回所有 0 到 1 之間(不包括 0 和 1)滿足分母小于等于 n 的 最簡 分數 。
分數可以以 任意 順序返回。

示例 1: 輸入:n = 2 輸出:["1/2"] 解釋:"1/2" 是唯一一個分母小于等于 2 的最簡分數。示例 2: 輸入:n = 3 輸出:["1/2","1/3","2/3"]示例 3: 輸入:n = 4 輸出:["1/2","1/3","1/4","2/3","3/4"] 解釋:"2/4" 不是最簡分數,因為它可以化簡為 "1/2" 。示例 4: 輸入:n = 1 輸出:[]提示: 1 <= n <= 100

解題:

  • 求最大公約數,化簡分子分母,遍歷所有可能,插入set
class Solution { public:vector<string> simplifiedFractions(int n) {unordered_set<string> ans;int i, k, g, u, d;for(k = 2; k <= n; ++k)for(i = 1; i < k; ++i){g = __gcd(i,k);u = i/g;d = k/g;ans.insert(to_string(u)+"/"+to_string(d));}return vector<string>(ans.begin(),ans.end());} };

下面解法,無需去重,找最大公約數為1的情況

class Solution { public:vector<string> simplifiedFractions(int n) {vector<string> ans;int i, k;for(i = 1; i < n; ++i)//分子for(k = i+1; k <= n; ++k)//分母 > 分子{if(__gcd(i,k)==1)ans.push_back(to_string(i)+"/"+to_string(k));}return ans;} };

3. LeetCode 5398. 統計二叉樹中好節點的數目 medium

題目鏈接
給你一棵根為 root 的二叉樹,請你返回二叉樹中好節點的數目。

「好節點」X 定義為:從根到該節點 X 所經過的節點中,沒有任何節點的值大于 X 的值。

示例 1:

輸入:root = [3,1,4,3,null,1,5] 輸出:4 解釋:圖中藍色節點為好節點。 根節點 (3) 永遠是個好節點。 節點 4 -> (3,4) 是路徑中的最大值。 節點 5 -> (3,4,5) 是路徑中的最大值。 節點 3 -> (3,1,3) 是路徑中的最大值。

示例 2:

輸入:root = [3,3,null,4,2] 輸出:3 解釋:節點 2 -> (3, 3, 2) 不是好節點,因為 "3" 比它大。示例 3: 輸入:root = [1] 輸出:1 解釋:根節點是好節點。提示: 二叉樹中節點數目范圍是 [1, 10^5] 。 每個節點權值的范圍是 [-10^4, 10^4]

解答:

  • 簡單的二叉樹遍歷,帶一個最大值遞歸更新
class Solution {int count = 0; public:int goodNodes(TreeNode* root) {dfs(root, root->val);return count;}void dfs(TreeNode* root, int maxv){if(!root) return;if(root->val >= maxv)count++;maxv = max(maxv, root->val);//更新最大值dfs(root->left, maxv);dfs(root->right,maxv);} };

4. LeetCode 5399. 數位成本和為目標值的最大數字 hard

題目鏈接
給你一個整數數組 cost 和一個整數 target 。請你返回滿足如下規則可以得到的 最大 整數:

  • 給當前結果添加一個數位(i + 1)的成本為 cost[i] (cost 數組下標從 0 開始)。
  • 總成本必須恰好等于 target 。
  • 添加的數位中沒有數字 0 。

由于答案可能會很大,請你以字符串形式返回。

如果按照上述要求無法得到任何整數,請你返回 “0” 。

示例 1: 輸入:cost = [4,3,2,5,6,7,2,5,5], target = 9 輸出:"7772" 解釋:添加數位 '7' 的成本為 2 ,添加數位 '2' 的成本為 3 。 所以 "7772" 的代價為 2*3+ 3*1 = 9"997" 也是滿足要求的數字,但 "7772" 是較大的數字。數字 成本1 -> 42 -> 33 -> 24 -> 55 -> 66 -> 77 -> 28 -> 59 -> 5示例 2: 輸入:cost = [7,6,5,5,5,6,8,7,8], target = 12 輸出:"85" 解釋:添加數位 '8' 的成本是 7 ,添加數位 '5' 的成本是 5"85" 的成本為 7 + 5 = 12 。示例 3: 輸入:cost = [2,4,6,2,4,6,4,4,4], target = 5 輸出:"0" 解釋:總成本是 target 的條件下,無法生成任何整數。示例 4: 輸入:cost = [6,10,15,40,40,40,40,40,40], target = 47 輸出:"32211"提示: cost.length == 9 1 <= cost[i] <= 5000 1 <= target <= 5000

解題:
比賽回溯超時解:

[1,1,1,1,1,1,1,3,2] // 超時例子 10 class Solution {vector<vector<int>> v;string path, ans="0";int sum = 0;int t;bool found = false; public:string largestNumber(vector<int>& cost, int target) {t = target;for(int i = 0; i < 9; ++i)v.push_back({cost[i],i+1});sort(v.begin(),v.end(),[](auto a, auto b){if(a[0]==b[0]) return a[1] > b[1];return a[0] < b[0];});dfs();sort(ans.begin(),ans.end(),[](auto a, auto b){return a > b;});return ans;}void dfs(){if(sum > t)return;if(sum == t){if(path.size() > ans.size() || (path.size() == ans.size() && path > ans))ans = path;return;}for(int i = 0; i < 9; ++i){sum += v[i][0];path += v[i][1]+'0';dfs();sum -= v[i][0];path.pop_back();}} };

總結

以上是生活随笔為你收集整理的LeetCode 第 26 场双周赛(363/1971,前18.4%)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。