
| 铭记于心 | ||
|---|---|---|
| 🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉 |
众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️
💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(dfs),💝宽度优先搜索(bfs),💝数论,💝动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!🎉🎉🎉
Loading Question… - 力扣(LeetCode)

class Solution {
public:
void dfs(vector<vector<int>>& isConnected, vector<int>& visited, int cities, int i) {
for (int j = 0; j < cities; j++) {
if (isConnected[i][j] == 1 && !visited[j]) {
visited[j] = 1;
dfs(isConnected, visited, cities, j);
}
}
}
int findCircleNum(vector<vector<int>>& isConnected) {
int cities = isConnected.size();
vector<int> visited(cities);
int provinces = 0;
for (int i = 0; i < cities; i++) {
if (!visited[i]) {
dfs(isConnected, visited, cities, i);
provinces++;
}
}
return provinces;
}
};
Loading Question… - 力扣(LeetCode)

思路
class Solution {
public:
bool containsCycle(vector<vector<char>>& grid) {
g = grid;
vi = vector<vector<bool>>(g.size(), vector<bool>(g[0].size(), false));
for (int i = 0; i < g.size(); i++) {
for (int j = 0; j < g[i].size(); j++) {
if (g[i][j] == '.') continue;
if (dfs(g[i][j], i, j, -1, -1)) return true;
}
}
return false;
}
bool dfs(char c, int x, int y, int px, int py) {
if (x < 0 || x >= g.size() || y < 0 || y >= g[0].size()) return false;
if (g[x][y] != c) return false;
if (vi[x][y]) return true;
vi[x][y] = true;
for (auto d : dd) {
int dx = x + d[0];
int dy = y + d[1];
if (dx == px && dy == py) continue;
if (dfs(c, dx, dy, x, y)) return true;
}
vi[x][y] = false;
g[x][y] = '.';
return false;
}
private:
vector<vector<char>> g;
vector<vector<bool>> vi;
vector<vector<int>> dd = { {0,1}, {0,-1}, {1,0}, {-1,0} };
};
Loading Question… - 力扣(LeetCode)

class UnionFind {
constructor(n) {
this.parent = new Array(n);
this.size = new Array(n);
this.count = n; // 本题用不到
this.init(n);
}
init(n) {
let parent = this.parent;
let size = this.size;
for (let i = 0; i < n; i++) {
parent[i] = i;
size[i] = 1;
}
}
find(x) {
let parent = this.parent;
while (x != parent[x]) {
parent[x] = parent[ parent[x] ];
x = parent[x];
}
return x;
}
union(p, q) {
let rootP = this.find(p);
let rootQ = this.find(q);
if (rootP == rootQ) {
return ;
}
let parent = this.parent;
let size = this.size;
if (size[rootP] > size[rootQ]) {
parent[rootQ] = rootP;
size[rootP] += size[rootQ];
} else {
parent[rootP] = rootQ;
size[rootQ] += size[rootP];
}
this.count--;
}
connected(p, q) {
return this.find(p) == this.find(q);
}
}
var findRedundantConnection = function(edges) {
let len = edges.length;
let union = new UnionFind(len);
let rest = [];
for (let i = 0; i < edges.length; i++) {
let [x, y] = edges[i];
if (union.connected(x, y)) {
rest.push([x, y]);
} else {
union.union(x, y);
}
}
return rest.pop();
};
🌹写在最后💖:
相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!🌹🌹🌹