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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

LeetCode 第 17 场双周赛(469/897,前52.3%)

發(fā)布時(shí)間:2024/7/5 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 第 17 场双周赛(469/897,前52.3%) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 比賽結(jié)果
    • 2. 題目
      • LeetCode 5143. 解壓縮編碼列表 easy
      • LeetCode 5144. 矩陣區(qū)域和 medium
      • LeetCode 5145. 祖父節(jié)點(diǎn)值為偶數(shù)的節(jié)點(diǎn)和 medium
      • LeetCode 5146. 不同的循環(huán)子字符串 hard

1. 比賽結(jié)果

做出來了1, 3兩題,第2題在比賽結(jié)束后10分鐘提交通過。

2. 題目

LeetCode 5143. 解壓縮編碼列表 easy

題目鏈接
給你一個(gè)以行程長(zhǎng)度編碼壓縮的整數(shù)列表 nums 。
考慮每相鄰兩個(gè)元素 [a, b] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一對(duì)都表示解壓后有 a 個(gè)值為 b 的元素。

請(qǐng)你返回解壓后的列表。

示例: 輸入:nums = [1,2,3,4] 輸出:[2,4,4,4]提示: 2 <= nums.length <= 100 nums.length % 2 == 0 1 <= nums[i] <= 100

解答:語(yǔ)文題,讀懂題目即可,一開始沒讀懂,出錯(cuò)一次。

class Solution { public:vector<int> decompressRLElist(vector<int>& nums) {vector<int> ans;int count, val;for(int i = 0; i < nums.size()/2; ++i){count = nums[2*i];val = nums[2*i+1];while(count--)ans.push_back(val);}return ans;} };

LeetCode 5144. 矩陣區(qū)域和 medium

題目鏈接
給你一個(gè) m * n 的矩陣 mat 和一個(gè)整數(shù) K ,請(qǐng)你返回一個(gè)矩陣 answer ,其中每個(gè) answer[i][j] 是所有滿足下述條件的元素 mat[r][c] 的和:

i - K <= r <= i + K, j - K <= c <= j + K 且 (r, c) 在矩陣內(nèi)。 示例 1: 輸入:mat = [[1,2,3],[4,5,6],[7,8,9]], K = 1 輸出:[[12,21,16],[27,45,33],[24,39,28]] 示例 2: 輸入:mat = [[1,2,3],[4,5,6],[7,8,9]], K = 2 輸出:[[45,45,45],[45,45,45],[45,45,45]]提示: m == mat.length n == mat[i].length 1 <= m, n, K <= 100 1 <= mat[i][j] <= 100

解題:

  • 按行動(dòng)態(tài)規(guī)劃,ans[i][j] = ans[i][j-1]+vs(mat,j+K,i-K,i+K)-vs(mat,j-K-1,i-K,i+K)
  • 后面的和 == 左邊的和 + 新增加的列 - 出去的列
class Solution {int m, n, sum, x, y; public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int K) {m = mat.size();n = mat[0].size();vector<vector<int>> ans(m, vector<int>(n));int i, j;for(i = 0; i < m; ++i){ans[i][0] = sqsum(mat,i,0,K);for(j = 1; j < n; j++)ans[i][j] = ans[i][j-1]+vs(mat,j+K,i-K,i+K)-vs(mat,j-K-1,i-K,i+K);}return ans;}int vs(vector<vector<int>>& mat, int j, int i0, int i1){for(sum=0 ; i0 <= i1; i0++){if(inside(i0,j))sum += mat[i0][j];}return sum;}int sqsum(vector<vector<int>>& mat, int i, int j, int K){sum = 0;for(x=i-K; x <= i+K; ++x)for(y = j-K; y<= j+K; ++y){if(inside(x,y))sum += mat[x][y];}return sum;}bool inside(int &x, int &y){return (x>=0 && x<m && y>=0 && y<n);} };

LeetCode 5145. 祖父節(jié)點(diǎn)值為偶數(shù)的節(jié)點(diǎn)和 medium

題目鏈接

給你一棵二叉樹,請(qǐng)你返回滿足以下條件的所有節(jié)點(diǎn)的值之和:

  • 該節(jié)點(diǎn)的祖父節(jié)點(diǎn)的值為偶數(shù)。(一個(gè)節(jié)點(diǎn)的祖父節(jié)點(diǎn)是指該節(jié)點(diǎn)的父節(jié)點(diǎn)的父節(jié)點(diǎn)。)

如果不存在祖父節(jié)點(diǎn)值為偶數(shù)的節(jié)點(diǎn),那么返回 0 。

示例:

輸入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] 輸出:18 解釋:圖中紅色節(jié)點(diǎn)的祖父節(jié)點(diǎn)的值為偶數(shù),藍(lán)色節(jié)點(diǎn)為這些紅色節(jié)點(diǎn)的祖父節(jié)點(diǎn)。 提示: 樹中節(jié)點(diǎn)的數(shù)目在 110^4 之間。 每個(gè)節(jié)點(diǎn)的值在 1100 之間。

解題:常規(guī)操作,遞歸

class Solution { public:int sumEvenGrandparent(TreeNode* root) {int ans = 0;dfs(ans, root);return ans;}void dfs(int& ans, TreeNode* root){if(!root) return;if(root->val%2 == 0){if(root->left){if(root->left->left)ans += root->left->left->val;if(root->left->right)ans += root->left->right->val;}if(root->right){if(root->right->left)ans += root->right->left->val;if(root->right->right)ans += root->right->right->val;}}dfs(ans, root->left);dfs(ans, root->right);} };

LeetCode 5146. 不同的循環(huán)子字符串 hard

題目鏈接

給你一個(gè)字符串 text ,請(qǐng)你返回滿足下述條件的 不同 非空子字符串的數(shù)目:這些子字符串可以寫成某個(gè)字符串與其自身的串聯(lián)。

示例 1: 輸入:text = "abcabcabc" 輸出:3 解釋:3 個(gè)子字符串分別為 "abcabc""bcabca""cabcab" 。示例 2: 輸入:text = "leetcodeleetcode" 輸出:2 解釋:2 個(gè)子字符串為 "ee""leetcodeleetcode" 。提示: 1 <= text.length <= 2000 text 只包含小寫英文字母。

解題:

想著暴力能夠破解,想多了,hard題目,不能暴力解。
超時(shí)代碼:

class Solution { public:int distinctEchoSubstrings(string text) {int i, len, n = text.size();string s, doubS;set<string> set;for(len = 1; len <= n/2+1; len++){for(i = 0; i <= n-len; ++i){s = text.substr(i, len);doubS = s+s;if(text.find(doubS) != text.npos)set.insert(doubS);}}return set.size();} };

class Solution { public:int distinctEchoSubstrings(string text) {int i, len, n = text.size(), count = 0;string s, doubS;for(len = 1; len <= n/2+1; len++){set<string> set;for(i = 0; i <= n-2*len; ++i){s = text.substr(i, len);doubS = text.substr(i,2*len);if(s+s == doubS)set.insert(doubS);}count += set.size();}return count;} };

  • 用c++17 的 string_view 可以避免復(fù)制,可以節(jié)省內(nèi)存
class Solution { public:int distinctEchoSubstrings(string text) {int i, len, n = text.size(), count = 0;string_view t(text);for(len = 1; len <= n/2+1; len++){set<string_view> set;for(i = 0; i <= n-2*len; ++i){if(t.substr(i,len) == t.substr(i+len,len))set.insert(t.substr(i,len));}count += set.size();}return count;} };

總結(jié)

以上是生活随笔為你收集整理的LeetCode 第 17 场双周赛(469/897,前52.3%)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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