
搜索算法合集
文章平均质量分 55
dfs、bfs、并查集、回溯
wenningker
此人无趣
展开
-
【leetcode】【题解合集】
题解合集原创 2022-10-15 11:46:54 · 2214 阅读 · 0 评论 -
【C++】【leetcode200】岛屿数量(DFS、BFS)代码优化
岛屿数量DFSclass Solution {public: int n,m; void dfs(vector<vector<char>>& grid, vector<vector<int>>& visited,int i,int j) { if(i < 0 || i > m - 1 || j < 0 || j > n - 1 || grid[i][j] == '0')return原创 2022-04-15 21:37:25 · 543 阅读 · 0 评论 -
【c++】【leetcode207】课程表(拓扑排序)
leetcode课程表解题思路求拓扑排序,从入度为0的点出发去遍历vector<vector<int>> edges(numCourses);记录每个顶点的关联顶点vector<int> degree(numCourses);记录每个顶点的入度class Solution {public: bool canFinish(int numCourses, vector<vector<int>>& prerequisite原创 2022-04-25 15:24:38 · 1276 阅读 · 0 评论 -
树的路径和总结:【leetcode124,543,2246】
解题思路一棵保存信息的树如何去递归?分析单独的子树要进行什么操作分析这颗子树要返回什么东西示例1、二叉树的直径每一棵子树的直径是其子树+1返回的当前结点的直径(左边的直径和右边的直径取最大)2、二叉树的最大路径和每一棵子树的路径和max(左孩子路径和,有孩子路径和)+根节点的值,如果左孩子或者有孩子路径和为负数,则直接砍掉不要返回当前子树的最大路径和代码如下leetcode543二叉树的直径class Solution {public: int ans =原创 2022-04-18 16:34:28 · 787 阅读 · 0 评论 -
【c++】【leetcode679】24点游戏(暴力枚举dfs+代码优化)
leetcode 679: 24点游戏解题思路1、整数转换为浮点数求解,因为除法可能会出现小数2、浮点数和24比较,确定一个精度误差3、枚举所有的可能,如果达到24进行剪枝核心在4个数中任选两个数进行四则运算,假设为a op b = x,此时在数组中删除a和b,把x加入数组中,在剩下的三个数里任选两个进行四则运算。当数组中只剩下一个数时,说明运算完成,与24比较即可。代码class Solution {public: const double eps = 1e-8;原创 2022-04-25 10:39:28 · 2951 阅读 · 0 评论 -
【C++】【leetcode130】被围绕的区域(DFS)
被围绕的区域DFS解题思路图的深度优先搜索这里有一个思路:利用占位符去标记,就不需要有一个新的标记数组class Solution {public: int n, m; void dfs(vector<vector<char>>& board, int x, int y) { if(x < 0 || y < 0||x > n - 1 || y > m - 1 || board[x][y] != 'O')r原创 2022-04-15 19:34:54 · 409 阅读 · 0 评论 -
【c++】【leetcode.77.797】组合问题/所有路径,回溯算法
回溯算法原创 2021-12-14 14:10:51 · 1068 阅读 · 0 评论 -
【c++】【leetcode547】省份数量
leetcode547省份数量解题思路并查集1、find()函数,发现x的根2、Union()函数,合并代码class Solution {public: //发现x的根 int find(vector<int> &parent, int x) { if(parent[x] != x) { parent[x] = find(parent,parent[x]); } return par原创 2022-04-12 17:10:16 · 589 阅读 · 0 评论 -
【c++】【leetcode 99】恢复二叉搜索树
恢复二叉搜索树解题思路二叉搜索树的中序遍历应该是升序排列,如果不是升序排列说明中间出现了问题。1、得到二叉搜索树的中序遍历2、找到不符合顺序的两个值进行交换,即当前数大于下一个数的值如:12375648,找到第一个顺序不符的7,和第二个顺序不符的4,把两个数进行交换就可以恢复正序时间复杂度:O(n),遍历一遍即可得到结果空间复杂度:O(n)代码/** * Definition for a binary tree node. * struct TreeNode { * int原创 2022-04-03 17:16:11 · 1186 阅读 · 0 评论 -
【c++】【leetcode 31】下一个排列
解题思路下一个比当前字典序大的排列有如下特征:(假设为[1,3,2,4])1、交换的位次是最靠后的,比如这里交换之后1和3保持不变2、从小到大排列是字典序最小的3、从大到小排列是字典序最大的从后往前找到第一个逆序nums[i] > nums[i - 1],即与后面的交换的为nums[i-1]在后面的n-i个数里,找到与要交换的数最接近的进行交换交换完成之后,把剩下的逆序改为正序排列,保证交换完之后最小时间复杂度:最坏的情况下需要遍历三次数组,因此时间复杂度为O(3n)空间复杂度.原创 2022-03-27 16:32:33 · 1553 阅读 · 0 评论 -
【c++】【leetcode 47】全排列II
解题思路参考组合总和该解题思路来自代码随想录如果used[i-1]为真,说明我还在取i-1这一支上的树,还没到同层如果used[i-1]为假,说明i-1这一支已经结束了,现在开始同层的另一支代码class Solution {private: vector<vector<int>> result; vector<int> path; void backtracking (vector<int>& nums, ve原创 2022-03-01 11:21:03 · 566 阅读 · 0 评论 -
【c++】【leetcode 40】组合总和II
解题思路回溯+去重与组合问题差不多的做法,该问题需要去重代码class Solution {public: vector<vector<int>> ans; vector<int> path; vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { sort(candidates.b原创 2022-03-01 09:50:10 · 510 阅读 · 0 评论 -
【c++】【leetcode133】克隆图,利用广度优先搜索
题目要求使用深拷贝,关于浅拷贝和深拷贝参见c++浅拷贝和深拷贝解析:利用广度优先搜索,借助队列和哈希表实现,时间复杂度O(n),空间复杂度O(n)哈希表用来存储原始节点和对应的新节点,同时用来判断某个结点是否被访问过广度优先搜索借助队列实现由于是深拷贝,要借助关键词new来实现代码实现class Solution {public: Node* cloneGraph(Node* node) { if (node == nullptr) { .原创 2022-02-24 09:36:34 · 333 阅读 · 0 评论