摘要: 一、快慢指针 1.判定链表中是否含有环 经典解法就是用两个指针,一个跑得快,一个跑得慢。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。 boolean hasCycle(ListNode head) { Lis 阅读全文
posted @ 2022-01-15 14:46 nxf_rabbit75 阅读(80) 评论(0) 推荐(0) 编辑
摘要: BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度可能比 DFS 大很多。 BFS框架: // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Queue<Node> q; // 阅读全文
posted @ 2022-01-15 13:48 nxf_rabbit75 阅读(145) 评论(0) 推荐(0) 编辑
摘要: ♥ ♥ ♥回溯算法其实就是DFS算法,本质上就是一种暴力穷举算法。 解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考3个问题: 路径:也就是已经做出的选择。 选择列表:也就是你当前可以做的选择。 结束条件:也就是到达决策树底层,无法再做选择的条件。 代码方面,回溯算法的框架: resu 阅读全文
posted @ 2022-01-15 11:08 nxf_rabbit75 阅读(33) 评论(0) 推荐(0) 编辑
摘要: ♥♥♥二叉树题目的递归解法可以分两类思路: 第一类是遍历一遍二叉树得出答案(回溯算法核心框架) 第二类是通过分解问题计算出答案(动态规划核心框架) 遇到一道二叉树的题目时的通用思考过程是: 是否可以通过遍历一遍二叉树得到答案?如果不能的话,是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问 阅读全文
posted @ 2022-01-15 11:06 nxf_rabbit75 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 1.数组 初始化: int m=5,n=10; // 初始化一个大小为10的int数组,其中的值默认初始化为0 int[] nums = new int[n]; // 初始化一个m*n的二维布尔数组 // 其中的元素默认初始化为false boolean[][] visited = new bool 阅读全文
posted @ 2022-01-15 11:04 nxf_rabbit75 阅读(39) 评论(0) 推荐(0) 编辑