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的更多相关文章

  1. (转)The AlphaGo Replication Wiki

    The AlphaGo Replication Wiki 摘自:https://github.com/Rochester-NRT/RocAlphaGo/wiki/01.-Home Contents : ...

  2. 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. ...

  3. Deep Learning中的Large Batch Training相关理论与实践

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在分布式训练时,提高计算通信占比是提高计算加速比的有效手段,当网络通信优化到一 ...

  4. Python Tools for Machine Learning

    Python Tools for Machine Learning Python is one of the best programming languages out there, with an ...

  5. 3.The significance of Books 书本的意义

    3.The significance of Books 书本的意义 (1)A bookless life is an imcomplete life.Books influence the depth ...

  6. AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...

  7. Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来

    Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来 来源 https://www.freebuf.com/articles/paper/184903.ht ...

  8. booklist for machine learning

    Recommended Books Here is a list of books which I have read and feel it is worth recommending to fri ...

  9. Android 性能优化(20)多核cpu入门:SMP Primer for Android

    SMP Primer for Android 1.In this document Theory Memory consistency models Processor consistency CPU ...

  10. 1 - ImageNet Classification with Deep Convolutional Neural Network (阅读翻译)

    ImageNet Classification with Deep Convolutional Neural Network 利用深度卷积神经网络进行ImageNet分类 Abstract We tr ...

随机推荐

  1. XML 从基础到精通

    1.简介 XML(可扩展标记语言)语言是一种数据交换标准,用于存储数据:关键词是标记: XML具有以下优点: (1) 方便的穿过防火墙,在不同的操作系统之间通信,跨语言,跨平台.数据共享非常方便.(J ...

  2. 一个不错的angular 字体库( 引用js文件就行)

    https://klarsys.github.io/angular-material-icons/ 使用方法: 1.引入这个js文件, <script src="//cdnjs.clo ...

  3. iOS7以后的侧滑返回上一页

    我们知道,iOS7以后,导航控制器默认带了侧滑返回功能,但是仅限于屏幕边缘.而且在你自定义leftBarButtonItem等之后侧滑效果就会消失.这种问题怎么解决呢? 首先,我们先来看看系统的这种手 ...

  4. 转:Loadrunner上传文件解决办法(大文件)

    最近再做一个跟海量存储相关的项目测试,需要通过LR模拟用户大量上传和下载文件,请求是Rest或Soap,同时还要模拟多种大小尺寸不一的文件 通常情况下,都是使用简单的post协议即可: 方法一: we ...

  5. XML简单的增改删操作

    XML文件的简单增改删,每一个都可以单独拿出来使用. 新创建XML文件,<?xmlversion="1.0"encoding="utf-8"?> & ...

  6. Posix消息队列实现机制

    本文是对<Unix 网络编程 卷2:进程通信>的笔记. 引言 消息队列是进程间通信的一种方式,可是如果不理解他的实现原理,会有众多不理解之处,下面就结合本书中的例子,对posix消息队列来 ...

  7. wex5 实战 微信6位数字密码输入设计

    微信支付使用是6位数字输入,用wex5能不能制作这种效果呢? 答案是肯定的. 根据网上提供的数字插件,研究源码后,与wex5进行整后修改,便于利用wex5框架优势. 一 效果演示: 弹出密码框 输入 ...

  8. JAVA调用c/c++代码

    JNI是Java Native Interface的缩写,中文为JAVA本地调用.使用JNI可以很方便的用我们的Java程序调用C/C++程序.很多时候,某些功能用Java无法实现,比如说涉及到底层驱 ...

  9. IOS_FMDB有关字典、数组存储及获取问题

    http://blog.csdn.net/betterbb/article/details/25984455 FMDB存储字典或数组时会变成字符串存入sqlite里,但如果不将其转换成json格式存储 ...

  10. STM32串口寄存器操作(转)

    源:STM32串口寄存器操作 //USART.C /************************************************************************** ...