6925. 故障键盘 - 力扣(LeetCode)
思路:模拟
class Solution { public: string finalString(string s) { string res; for(auto c : s) { if(c == 'i') reverse(res.begin(), res.end()); else res += c; } return res; } };
6953. 判断是否能拆分数组 - 力扣(LeetCode)
思路:脑筋急转弯
class Solution { public: bool canSplitArray(vector<int>& nums, int m) { int n = nums.size(); if(n <= 2) return true; for(int i = 0; i < n - 1; i ++ ) if(nums[i] + nums[i + 1] >= m) return true; return false; } };
2812. 找出最安全路径 - 力扣(LeetCode)文章来源:https://www.toymoban.com/news/detail-631858.html
思路:多源bfs+倒序枚举+并查集文章来源地址https://www.toymoban.com/news/detail-631858.html
class Solution { public: int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1}; typedef pair<int, int> PII; int maximumSafenessFactor(vector<vector<int>>& grid) { int n = grid.size(); vector<PII> q; vector<vector<int>> dist(n, vector<int>(n, -1)); for(int i = 0; i < n; i ++ ) for(int j = 0; j < n; j ++ ) if(grid[i][j]) { q.emplace_back(i, j); dist[i][j] = 0; } vector<vector<PII>> groups = {q};//groups每一层就代表的到1的距离相同的点 //第0层就是1那些点,然后第一层就是第一层遍历的点,以此类推 while (q.size()) { vector<PII> nq; for(auto &[i, j] : q) { for (int k = 0; k < 4; k ++ ) { int x = i + dx[k], y = j + dy[k]; if(x >= 0 && x < n && y >= 0 && y < n && dist[x][y] < 0) { nq.emplace_back(x, y); dist[x][y] = groups.size(); } } } groups.push_back(nq); q = move(nq);//move将nq强制转化为右值引用 } //并查集 vector<int> p(n * n); iota(p.begin(), p.end(), 0);//0,1,2,3,4... function<int(int)> find = [&](int x) -> int { if(p[x] != x) return p[x] = find(p[x]); return p[x]; }; //因为最后还加了一层空数组,所以减2 for(int res = groups.size() - 2; res > 0; res -- ) { for(auto &[i, j] : groups[res]) { for (int k = 0; k < 4; k ++ ) { int x = i + dx[k], y = j + dy[k]; if(x >= 0 && x < n && y >= 0 && y < n && dist[x][y] >= dist[i][j]) p[find(x * n + y)] = find(i * n + j); } } if(find(0) == find(n * n - 1)) return res; } return 0; } };
到了这里,关于力扣第357场周赛补题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!