...
代码块 |
---|
bool flag; void dfs(vector<vector<int>> &grid, int x, int y) { static int dx[] = {-1, 0, 1, 0}; static int dy[] = {0, 1, 0, -1}; grid[x][y] = 3; // 标记已访问 for(int i = 0; i < 4; i++) { int tx = x + dx[i]; int ty = y + dy[i]; if(tx < 0 || ty < 0 || tx >= grid.size() || ty >= grid[0].size()) { // 只有当前点是0才会有dfs搜索,如果搜到出界了,表明当前点(x,y)就在边界上,不符合封闭岛定义 flag = false; } else if(grid[tx][ty] == 0) { dfs(grid, tx, ty); } } } |
贪心:
https://leetcode-cn.com/problems/advantage-shuffle/
一定是每一步都有当前的最优解才可以用贪心算法,如果不到最后一步都不知道哪个是最优秀解,贪心就失效了,比如这题:https://leetcode-cn.com/problems/maximum-score-from-performing-multiplication-operations/,这里,每次选从左右里选一个,貌似可以用贪心拿到每次的最优解,但是其实是错误的,有可能上一步的最优解把下一步更优的解排除了,所以不到最后一步,都无法确定哪个是最优的,也就不能应用贪心算法来求解。
并查集合:
https://leetcode-cn.com/problems/number-of-provinces/
对于并查集来说,刚建好的集合有些路径可能是没压缩的,所以在执行查找时可以顺便执行一次压缩,而且查找时的路径压缩是针对整条路径上的点进行压缩,而不单单是末端结点。
快速幂:
https://leetcode-cn.com/problems/count-good-numbers/
前缀和:
https://leetcode-cn.com/problems/subarray-sums-divisible-by-k/
滑动窗口:
https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/
单调栈:
https://leetcode-cn.com/problems/daily-temperatures/
双指针: