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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetcode第 46 场双周赛

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

題目A

https://leetcode-cn.com/problems/longest-nice-substring/
因為 length≤100length \leq 100length100,我們直接就可以遍歷子串然后更新答案。

class Solution { public:bool Check(string s){unordered_set<int> m;for (auto u : s)m.insert(u);for (auto u : m){if (u >= 'a' && m.count(u - 32) < 1) // 97 - 62 = 32return false;else if (u <= 'Z' && m.count(u + 32) < 1)return false;}return true;}string longestNiceSubstring(string s) {string ret = "";for (int i = 0; i < s.size(); i ++ ){for (int j = i + ret.size(); j < s.size(); j ++ ){if (Check(s.substr(i, j - i + 1))){ret = s.substr(i, j - i + 1);}}}return ret;} };

題目B

https://leetcode-cn.com/problems/form-array-by-concatenating-subarrays-of-another-array/
因為 length≤1000length \leq 1000length1000,我們直接就可以直接 O(N2)O(N^2)O(N2)的復雜度就解決該問題。
直接對numsnumsnums數組遍歷,遍歷的同時審核是否可以湊出來 groupsgroupsgroups數組

class Solution { public:vector<vector<int> > gps;vector<int> nums;bool Check(int st, int x){for (int j = 0; j < gps[x].size(); j ++ ){if (st + j >= nums.size() || gps[x][j] != nums[st + j])return false;}return true;}bool canChoose(vector<vector<int>>& groups, vector<int>& _nums) {nums = _nums;gps = groups;int j = 0;for (int i = 0; i < nums.size(); i ++ ){if (Check(i, j)){if (j == gps.size() - 1)return true;i += gps[j].size() - 1; // 減去 1 是因為后面有 ++j ++;}}return false;} };

題目C

https://leetcode-cn.com/problems/map-of-highest-peak/
直接就是一個 bfs 就可以了,主要越界情況,和**vector<vector >**的快速初始化

#define x first #define y second typedef pair<int, int> PII; class Solution { public: int n, m;bool Check(int a, int b){return a >= 0 && b >= 0 && a < n && b < m;}vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {n = isWater.size(), m = isWater[0].size();queue<PII> que;vector<vector<int> > ret(n, vector<int>(m, -1));for (int i = 0; i < n; i ++ )for (int j = 0; j < m; j ++ )if (isWater[i][j] == 1)que.push(PII(i, j)), ret[i][j] = 0;int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};PII tmp; int x, y;while (que.size()){tmp = que.front(); que.pop();for (int i = 0; i < 4; i ++ ) {x = tmp.x + dx[i], y = tmp.y + dy[i];if (Check(x, y) && ret[x][y] == -1) {ret[x][y] = 1 + ret[tmp.x][tmp.y];que.push(PII(x, y));}}}return ret;} };

題目D

https://leetcode-cn.com/problems/tree-of-coprimes/
有一個很玄學的問題,就是TMTMTM
vector copr[55];定義在全局變量那里就會超時,然而類的內部就很快,奇奇怪怪
對于本題的思路就是根據 nums 數字范圍太小,我們可以將互質數字進行枚舉是否在dfs的路徑上。
dfs的路徑就是我們根的路徑,很方便

const int N = 100010, M = N * 2; int h[N], e[M], ne[M], idx; int pos[55]; int depth[N];class Solution { public:int n;vector<int> w;vector<int> ret;vector<int> copr[55];inline int gcd(int x, int y) {if (y == 0)return x;elsereturn gcd(y, x % y);}void add(int x, int y) {e[idx] = y, ne[idx] = h[x], h[x] = idx ++;}void dfs(int u, int fa) {int val = w[u];for (auto & x : copr[val])if (pos[x] != -1)if (ret[u] == -1 || depth[ret[u]] < depth[pos[x]])ret[u] = pos[x];int tmp = pos[val];pos[val] = u;int v;for (int i = h[u]; ~i; i = ne[i]) {v = e[i];if (v == fa) continue;else {depth[v] = depth[u] + 1;dfs(v, u);}}pos[val] = tmp;}vector<int> getCoprimes(vector<int>& nums, vector<vector<int>>& edges) {for (int i = 1; i <= 50; i ++ )for (int j = 1; j <= 50; j ++ )if (gcd(i, j) == 1)copr[i].push_back(j);n = nums.size(), w = nums;memset(h, -1, sizeof h), idx = 0;memset(pos, -1, sizeof pos);memset(depth, 0, sizeof depth);for (auto & t : edges)add(t[0], t[1]), add(t[1], t[0]);ret.resize(n, -1);depth[0] = 0;dfs(0, -1);return ret;} };

總結

以上是生活随笔為你收集整理的leetcode第 46 场双周赛的全部內容,希望文章能夠幫你解決所遇到的問題。

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