随笔分类 - DFS
摘要:题目 题意: 对于树上的每个节点,找出与它的值互质的最近的祖先节点。 题解: 由于节点上的值在1-50之间,所以算互质很好算,事先算法。然后就是深度优先遍历树的时候维护路径上的节点的位置,利用1-50这个小范围,快速找到与当前节点值互质的值出现在哪些位置上 struct Node { int val
阅读全文
摘要:题目 题意:将n个数分成k组,使得k组中的最大值最小。 题解:暴力DFS,但是要注意两个地方剪枝,首先在DFS的过程中判断当前的最大值是不是已经超过了已有答案。 第二个剪枝的地方比较triky,由于我们对k组没有顺序要求的,所以当剩下的组都是空的时候,我们只需要DFS第一个组。 class Solu
阅读全文
摘要:题目 给你一个无向无环图,这个图的任何一个节点都可以当成一个树的根节点。让你找到形成的树的高度最小的那几个根节点。 首先,这个根节点要么只有1个,要么只有2个。 而且就在图中最长的一条路径上,如果这个路径上的节点数为偶数,那就是2个,否则就是1个 那么怎么找这条最长路径呢?首先从任意 一个点出发,找
阅读全文
摘要:"题目" 题解: 如标题,其实就是暴搜啦
阅读全文
摘要:"题目" 递归,分治,暴力跑就可以了
阅读全文
摘要:"题目" 题解:DFS,同时记住已经DFS的结果,防止重复搜索
阅读全文
摘要:"题目" 题意:给你一个只有0 9组成的字符串,让你在其中插入'+',' ',' ' 使其计算得到的值恰好等于target,输出所有的可能性。 题解:不给数据范围,很显然就会考虑到超时,每个字符后面有四种选择,如果暴搜的话,字符长度超过10几个,就很快超时了。 但是我可以告诉你,这题目的字符串最多只
阅读全文
摘要:"题目" 题意:从1 9中选出k个数之和等于n,这个k个数不能有相同的,输出所有可能的k个数字的集合,结果也不能重复 题解:暴搜,从n开始,每次减去1 9中的某个数字,然后继续递归。要注意剪枝,比如1 9中的数字大于n/k的是不可能存在答案中的,如果n 的值小于sum[k]也是不会有答案的。sum[
阅读全文
摘要:"题目" 题意:给你一个BST,其中任意两个元素被交换过了,让你把交换的元素复原。 题解:BST的中序遍历是个有序的数组,那么两个元素被交换了,我们可以for循环一次找出这两个数字。从小到大遍历,维护一个值max,表示当前遍历元素的最大值。由于两个元素被交换了,所以max一定有一段时间是不变的,直到
阅读全文
摘要:"题目" 题意:判断一个二叉树是否为 二叉搜索树BST 题解:所有思路都是去找二叉树中不满足BST性质的节点,找到了,就不符合,找不到就符合。那么怎么去找呢?我提供两种思想。 第一个是,BST的中序遍历是一个有序数组,所以把BST 中序遍历的结果拿出来,看看是不是有序的就可以了。很简单。那如果不让你
阅读全文
摘要:"题目" 第一发超时了,可以用一个数组表示状态,所有相等长度的区间,它的BST数目是一样的。
阅读全文
摘要:"题目" DFS,
阅读全文
摘要:"LeetCode Contest 166" 第一次知道LeetCode 也有比赛。 很久没有打过这种线上的比赛,很激动。 直接写题解吧 "第一题" 很弱智 "第二题" 也很简单的,我先排个序。 但是在用c++的快排的时候,被坑了,我一直的习惯是写自定义比较函数,没有写运算符重载,不知道为什么一直R
阅读全文
摘要:题目 上一题用了递归,这次用栈 ``` class Solution {public: int ans=0; int a[100][100]; int m; int x[100005]; int y[100005]; int s[100005]; int p[100005]; int totalNQ
阅读全文
摘要:题目 N 皇后问题。 其实就是DFS或者BFS的入门题。 要是可以用位运算来模拟皇后的摆放和棋盘,那么代码就很优雅了。 class Solution { public: vector<vector<string>> ans; int a[100][100]; int m; vector<vector
阅读全文