
搜索
算法题搜索专栏
小明的博客
acm小弟
展开
-
Leecode<每日一题>N 皇后
Leecode<每日一题>N 皇后题目链接思路:回溯法+限制数组class Solution {public: bool lie[10]{}; bool up[20]{}; bool down[20]{}; int choose[10]{}; vector<vector<string>> rt; void dfs(int cur,int n) {原创 2021-08-18 10:11:31 · 313 阅读 · 0 评论 -
Leecode<每日一题>优美的排列
Leecode<每日一题>优美的排列题目链接思路:枚举优化法,将每个位置可选择的情况枚举出来,然后通过递归枚举每一种可行的情况。class Solution {public: vector<vector<int>> ab_use = { {}, {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, {1,2,4,6,8,10,12,14}, {1,3,6,9,12,15}, {1,2,4,8,12}, {1,5,10,15}, {原创 2021-08-16 14:27:45 · 202 阅读 · 0 评论 -
Leecode<每日一题>二叉树的垂序遍历
Leecode<每日一题>二叉树的垂序遍历题目链接思路:map+multiset+dfs这题其实就是按照纵坐标、横坐标、值依次排序。map 键:坐标 值:multiset(用于给同一坐标的值排序),然后重写map比较器,先纵坐标再横坐标我的代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;原创 2021-07-31 10:53:54 · 216 阅读 · 0 评论 -
Leecode<每日一题>二叉树中所有距离为 K 的结点
Leecode<每日一题>二叉树中所有距离为 K 的结点题目链接思路:先遍历一遍将每个节点的父节点存储下来,然后从target开始层次遍历,找到距离为k的节点即可。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL),原创 2021-07-28 10:35:15 · 208 阅读 · 0 评论 -
Leecode<每日一题>火柴拼正方形
Leecode<每日一题>火柴拼正方形题目链接思路:预处理的时候判断一下火柴的长度总和是否是4的倍速,然后深度优先搜索,一条边一条边的凑到sum/4,凑到三条边的时候就行了。注意:将火柴的长度从大到小排序,这样false的数据会更快执行完。class Solution {public:bool dfs(vector<int>& matchsticks,int he,int edge,int target){ if (he == target) { edge++;原创 2021-07-09 18:31:41 · 213 阅读 · 0 评论 -
Leecode<每日一题>最深叶节点的最近公共祖先
Leecode<每日一题>最深叶节点的最近公共祖先题目链接思路:分三步,先求树的深度,再求最深叶子结点的个数,最后求 公共祖先,都是用深搜,时间复杂度o(n),n为结点个数。class Solution {public: //求最近公共祖先 bool flag = false; TreeNode* res; int dfs(TreeNode* node, int cur, int deep,int leafnum) { if (flag) return leafnum;原创 2021-07-07 17:31:48 · 155 阅读 · 0 评论 -
Leecode<每日一题>二叉树的最近公共祖先
Leecode<每日一题>二叉树的最近公共祖先题目链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/思路:深度优先搜索,当到达每个结点时,计算左子树、右子树和自身中包含两个目标节点的个数,要注意的是,当第一次找到个数为2的结点时,其实就是我们要找的答案。class Solution {public: bool flag = false; TreeNode* res; int dfs(Tree原创 2021-07-07 16:19:13 · 115 阅读 · 0 评论 -
Leecode<每日一题>公交路线
Leecode<每日一题>滑动谜题题目链接:https://leetcode-cn.com/problems/bus-routes/解题思路:首先将公交信息进行删减,只保留起始站、换乘站、终点站的信息即可,这样数据量大大缩减,然后使用普通的bfs进行搜索即可。下面贴出我的代码,只是ac了,还没有进行优化。class Solution {public:struct bus{ int num; int step; bus(int a,int b):num(a),step(b原创 2021-06-28 11:40:20 · 161 阅读 · 0 评论 -
Leecode<每日一题>滑动谜题
Leecode<每日一题>滑动谜题题目链接:https://leetcode-cn.com/problems/sliding-puzzle/算法思想:当然这题由于数据量较小,使用普通的bfs即可,我是借此机会练习一下启发式搜索的A算法,A算法相关介绍https://oi-wiki.org/search/astar/,下面贴出我的代码关键点:①h(x)的值我设定为二维数组当前状态x与目标状态target中对应位置数字不同的位置数量,当然不包括最后一个位置②维护的是包含指向Astar结构体原创 2021-06-26 16:02:19 · 177 阅读 · 0 评论