LeetCode---Depth-first && Breadth-first
417. Pacific Atlantic Water Flow
思路:构造两个二维数组分别存储大西洋和太平洋的结果,先初始化边界,然后从边界出发,深度优先遍历,标记满足条件的所有节点
static int[] dx = new int[]{-1,0,0,1};
static int[] dy = new int[]{0,1,-1,0};
public List<int[]> pacificAtlantic(int[][] matrix) {
List<int[]> res = new ArrayList<int[]>();
if(matrix == null || matrix.length == 0) return res;
int m = matrix.length;
int n = matrix[0].length;
boolean[][] p = new boolean[m][n];
boolean[][] a = new boolean[m][n];
//初始化两条边
for(int j = 0; j < n; j++){
p[0][j] = true;
a[m - 1][j] = true;
}
for(int i = 0; i < m; i++){
p[i][0] = true;
a[i][n - 1] = true;
}
//判断该点能不能流入两个海
for(int j = 0; j < n; j++){
dfs(matrix,p,0,j);
dfs(matrix,a,m - 1,j);
}
for(int i = 0; i < m; i++){
dfs(matrix,p,i,0);
dfs(matrix,a,i,n - 1);
}
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(p[i][j] && a[i][j]){
res.add(new int[]{i,j});
}
}
}
return res;
}
public void dfs(int[][] matrix,boolean[][] dp,int row,int col){
dp[row][col] = true;
int m = matrix.length;
int n = matrix[0].length;
for(int i = 0; i < 4; i++){
int p = row + dx[i];
int q = col + dy[i];
if(p < m && p >= 0 && q < n && q >= 0){
if(matrix[row][col] <= matrix[p][q] && dp[p][q] == false) dfs(matrix,dp,p,q);
}
}
}
473. Matchsticks to Square
思路:首先和不是4的整数倍,return false,然后将数组逆序排序,这样能更快的搜索到结果,然后深度优先遍历最后能将数组遍历完并且每条边都能等于target即可
public boolean makesquare(int[] nums) {
if(nums == null || nums.length < 4) return false;
int sum = 0;
for(int num : nums){
sum += num;
}
if(sum % 4 != 0) return false;
//将数组逆序排序以后能更快的搜索到结果
Arrays.sort(nums);
reverse(nums);
return dfs(nums,new int[4],0,sum / 4);
}
public boolean dfs(int[] nums,int[] sum,int idx,int target){
if(idx == nums.length && sum[0] == target && sum[1] == target && sum[2] == target){
return true;
}
for(int i = 0; i < 4; i++){
if(sum[i] + nums[idx] > target) continue;
sum[i] += nums[idx];
if(dfs(nums,sum,idx + 1,target)) return true;
sum[i] -= nums[idx];
}
return false;
}
public void reverse(int[] nums){
int i = 0;
int j = nums.length - 1;
while(i < j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
j--;
}
}
总结
207. Course Schedule:利用拓扑排序,不断取出入度为0的节点,判断最终计数器的值和节点个数是否一致,等价于判断有没有环
133. Clone Graph:利用map存下node.label和node对,方便查找
训练
332. Reconstruct Itinerary:利用map将节点和与之关联的节点保存起来,并利用优先队列进行排序,最后输出结果的时候,优先将堵塞的路径节点添加到结果前面
210. Course Schedule II:思路同207,但是要考虑没有先决条件的情况
200. Number of Islands:深度优先遍历,依次将每个岛中的1都变为0,同时计数
472. Concatenated Words:首先根据字符串长度排序,将短的一依次存入dict用作备选,之后动态规划依次判断后面的长字符串能否用短字符串拼接起来
329. Longest Increasing Path in a Matrix:深度优先遍历,依次找到递增的序列,注意利用之前的结果避免重复搜索
279. Perfect Squares:动态规划,res[n] = Min{ res[n - i * i] + 1 }, n - i * i >= 0 && i >= 1
310. Minimum Height Trees:首先将图的结构用map保存下来,然后取出叶子节点,依次将叶子节点和分支去除,得到新的叶子节点,若最后剩下的节点数<=2则作为结果返回
提示
1、将结果从后往前添加的经验-->332题
2、在二维数组中深度优先遍历的经验 构造两个数组保存四个方向-->417 200 329题
3、拓扑排序的算法-->207 210题
LeetCode---Depth-first && Breadth-first的更多相关文章
- (转)The AlphaGo Replication Wiki
The AlphaGo Replication Wiki 摘自:https://github.com/Rochester-NRT/RocAlphaGo/wiki/01.-Home Contents : ...
- Your data vis “Spidey-sense” & the need for a robust “utility belt”
@theboysmithy did a great piece on coming up with an alternate view for a timeline for an FT piece. ...
- Deep Learning中的Large Batch Training相关理论与实践
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在分布式训练时,提高计算通信占比是提高计算加速比的有效手段,当网络通信优化到一 ...
- Python Tools for Machine Learning
Python Tools for Machine Learning Python is one of the best programming languages out there, with an ...
- 3.The significance of Books 书本的意义
3.The significance of Books 书本的意义 (1)A bookless life is an imcomplete life.Books influence the depth ...
- AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks
ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...
- Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来 来源 https://www.freebuf.com/articles/paper/184903.ht ...
- booklist for machine learning
Recommended Books Here is a list of books which I have read and feel it is worth recommending to fri ...
- Android 性能优化(20)多核cpu入门:SMP Primer for Android
SMP Primer for Android 1.In this document Theory Memory consistency models Processor consistency CPU ...
- 1 - ImageNet Classification with Deep Convolutional Neural Network (阅读翻译)
ImageNet Classification with Deep Convolutional Neural Network 利用深度卷积神经网络进行ImageNet分类 Abstract We tr ...
随机推荐
- C# 经典入门12章-System.Collections.Generic命名空间
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtUAAAAsCAIAAAAl09PEAAAgAElEQVR4nOx95Vscyd7285cMPrg7Aw ...
- typescript中的工具 tsd
首先帮微软买个广告:VSCode 实在是太适合我了,感觉写起来无比舒畅,建议有兴趣的可以去试试用vsCode写前端. 最近开始使用ts去构建项目,感觉写起来非常的爽(本人以前接触过c#和java),终 ...
- HDU 1815 Building roads
二分答案 + 2-SAT验证 POJ 稳过,HDU C++ 超时,G++ 550ms左右AC #include<cstdio> #include<cstring> #inclu ...
- memory runs at single channel问题解决
memory runs at single channel 解决方案:开机后按DEL ,然后进入BIOS 选择第一项,回车! advanced下面的有个momori什么什么的,选择disable. m ...
- js实现input button从不可用变为可用
有时候明明是些很简单的东西,因为自己的一些大意,可能就在那圈子里一直兜兜转转,好久都绕不出来. 所以我也愿意把这些很简单的愚蠢写出来,与君共享~ 首先大家知道<input>有一个名叫“bu ...
- 根据浏览器UA信息进行跳转(移动和pc)
如何用php判断一个客户端是手机还是电脑?其实很简单,开发人员都知道,通过浏览器访问网站时,浏览器都会向服务器发送UA,即User Agent(用户代理).不同浏览器.同一浏览器的不同版本.手机浏览器 ...
- Android SystemProperties设置/取得系统属性的用法总结
通过调查得知,Android系统中取得/设置系统属性的用法参考以下3篇文章就足够了. 1.Android SystemProperties简介 介绍了设置属性需要的权限,已经设置权限的方法. Syst ...
- how to enable #ifdef macro in the command line of make?
Compilers normally use the -D flags eg Code: test.o: test.cpp $(CC) $(CFLAGS) -DTEST1 test.cpp -o $@
- 关于go的不爽
这里想记录下,自己学习.使用go语言,对于go语言不爽的地方. 1. 函数返回类型接在参数类型后面,不容易一眼看清楚函数的返回类型 如下,是不是有种很花的感觉. func NewReader(s st ...
- AD设计过程中的注意事项
1.编译报错:off sheet at....是纸张太小的原因,选择大一点的纸张报错就会消失.