自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 【LeetCode】链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。进阶:你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?1.哈希表解法2.分别统计从两个链表头到最终结点的结点个数,然后结点个数做差,让结点数多的链表头先走差值数的步数,然后两个链表头一起向前走,并判断两个链表头指向的

2021-08-05 15:23:24 118

原创 【LeetCode】环路检测(链表)

链表回环问题:给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index

2021-07-31 12:17:04 246

原创 # 【LeetCode】实现 strStr()字符串匹配 (KMP算法,BM算法,RK算法)

【LeetCode】实现 strStr()字符串匹配 (KMP算法,BM算法,RK算法,)1. KMP算法KMP算法的核心是next数组的创建!。出现了不匹配,如果是BF(Brute Force)的主串的指针需要回到下标4处的A,而模式串指针需要回到下标0处。但KMP算法的字符串匹配有两个不同,第一是主串的指针无需回退,第二是模式串的指针只需要按照next数组中对应的数进行回退即可。next数组中的重要知识点是字符串中的真前缀与真后缀:字符串abbacd为例:真前缀为{a,ab,

2021-03-04 14:01:50 232

原创 八皇后问题(递归)

八皇后问题(递归)如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。/* * 8*8的棋盘方格 * 每一行的某一列上要有一个皇后 * */public class EightQueen { public static int count=0; public static boolean noDanger(int row,int col,int chess[][]) { /

2021-03-03 22:49:00 108 1

原创 双指针法

双指针法(有待补充)双指针法主要用于线性表中使用,双指针法又可以细分为快慢指针,头尾指针…题目1:奇偶数分区快慢指针法 public static void odd_Even(int num[]) { int i = -1; int j = 0; for(;j<num.length;j++) { if(num[j]%2==0) { i++; swap(num,i,j); } } }头尾指针法 public static void odd_Ev

2020-11-20 10:02:11 70

原创 【LeetCode】最接近原点的K个点 (优先队列PriorityQueue,快速排序的根据基准数分区思想(双指针法分区))

【LeetCode】最接近原点的K个点 (优先队列PriorityQueue,快速排序的根据基准数分区思想)题目:我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]解释: (1, 3) 和原点之间的距离为sqrt(10), (-2, 2

2020-11-19 14:21:28 305

原创 【LeetCode】最长回文子串 (字符串,动态规划)

【LeetCode】最长回文子串 (字符串,动态规划)给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例2:输入: “cbbd”输出: “bb”1.暴力解法通过三个循环嵌套,前两个循环控制截取字符串的长度与起始点向右的移动,第三个循环是进行字符的回文匹配。所以暴力解法的时间复杂度是O(n的3次方)。public String longestPalind

2020-11-09 08:49:45 146

原创 【LeetCode】最长公共前缀 (字符串)

【LeetCode】最长公共前缀 (字符串)编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。一.纵向比较法:从左向右,一个字符一个字符的逐一比较。需要注意的就是对数组下标越界的判断。 public String longestCommonPrefix

2020-11-05 12:51:43 195

原创 【LeetCode】对角线遍历 (数组)

【LeetCode】对角线遍历 (数组)题目:给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。示例:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,4,7,5,3,6,8,9]解释:方法一:对角线迭代和翻转思路:解决许多复杂问题的常见策略是首先解决该问题的简化问题,然后考虑从简化问题到原始问题需要做哪些修改,方法一就是这种思路。首先考虑按照逐条对角线

2020-11-04 10:13:37 305

原创 【LeetCode】旋转矩阵 (数组)

【LeetCode】旋转矩阵 (数组)第一种方法:水平翻转 + 对角线翻转 = 二维数组顺时针旋转90度。 public static void rotate(int[][] matrix) { //水平翻转 int up = 0; int down = matrix.length-1; while(up<down) { int temp=0; for(int j=0;j<matrix[0].length;j++) { temp = matrix[u

2020-11-02 14:17:49 324

原创 【LeetCode】合并区间 (排序)

【LeetCode】合并区间 (排序)给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: intervals = [[30,80],[1,15],[1,100]]输出: [[1,100]]解释: 这个数组中的其它区间都在1与100之间.提示:int

2020-11-01 17:57:07 143

原创 BFS与DFS总结

BFS与DFS总结BFS与DFS基本操作与知识:深度优先搜索是一个不断回溯的过程。广度优先搜索是一层层遍历的过程。BFS模板:BFS 使用队列,把每个还没有搜索到的点依次放入队列,然后再弹出队列的头部元素当做当前遍历点。BFS 总共有两个模板:如果不需要确定当前遍历到了哪一层,BFS 模板如下:while queue 不空: cur = queue.pop() for 节点 in cur的所有相邻节点: if 该节点有效且未访问过:

2020-10-31 12:40:40 242

原创 【LeetCode】钥匙和房间 (BFS/DFS)

【LeetCode】钥匙和房间 (BFS/DFS)题目:有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间

2020-10-31 10:06:50 131

原创 【LeetCode】 01矩阵 (BFS/DFS)

【LeetCode】 01矩阵 (BFS/DFS)给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1一、广度优先搜索思路:对于 「Tree 的 BFS」 (典型的「单源 BFS」) 大家都已经轻车熟路了:首先把 root 节点入队,再一层一层无

2020-10-29 12:38:57 397

原创 【LeetCode】图像渲染(BFS/DFS)

【LeetCode】图像渲染(BFS/DFS)题目:有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像

2020-10-26 08:16:12 82

原创 【LeetCode】字符串解码 (栈)

【LeetCode】字符串解码 (栈)题目:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例1:输入:s = “3[a]2[bc]”输出:

2020-10-24 23:13:07 86

原创 【LeetCode】二叉树的中序遍历 (DFS的递归与非递归)

【LeetCode】二叉树的中序遍历 (DFS的递归与非递归)给定一个二叉树,返回它的中序 遍历。示例:DFS的递归调用:dfs的递归调用需要注意递归函数中必要的形参以及递归的条件或终止条件! List<Integer> l = new LinkedList<Integer>(); public List<Integer> inorderTraversal(TreeNode root) { DFS(root,l); retur

2020-10-21 12:59:33 677

原创 DFS的显式与隐式

DFS的显式与隐式DFS的显式与隐式其实就是递归与非递归。1.当我们递归地实现 DFS 时,似乎不需要使用任何栈。但实际上,我们使用的是由系统提供的隐式栈,系统栈。boolean DFS(Node cur, Node target, Set<Node> visited) { return true if cur is target; for (next : each neighbor of cur) { if (next is not in visited

2020-10-20 22:00:11 340

原创 【LeetCode】克隆图 (DFS/BFS)

【LeetCode】克隆图 (DFS/BFS)题目:给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node {public int val;public List neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。邻

2020-10-19 22:21:18 198

原创 【LeetCode】岛屿数量 (DFS/BFS)

【LeetCode】岛屿数量 (DFS)题目:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”] ]输出:1这题可以通过

2020-10-18 16:38:39 205

原创 【LeetCode】每日温度 (栈)

【LeetCode】每日温度 (栈)题目:请根据每日 气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1,1, 4, 2, 1, 1, 0, 0]。 提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30,100] 范围内的整数。

2020-10-13 23:31:45 180

原创 【LeetCode】完全平方数 (BFS)

【LeetCode】完全平方数 (BFS)给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例2:输入: n = 13输出: 2解释: 13 = 4 + 9.本题可以用动态规划,但是这里主要是用BFS宽度优先遍历。把每一种可能性都加入到队列中,一定要注意去重(不然会死循环)。【做了一些用BFS做的题发现,使用队列去BFS

2020-10-08 23:14:01 187

原创 【LeetCode】 打开转盘锁 (BFS)

输入:deadends = ["0201","0101","0102","1212","2002"], target = "0202"输出:6解释:可能的移动序列为 "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202"。注意 "0000" -> "0001" -> "0002" -> "0102" -> "0202" 这样的序列是不能解锁的,因为当拨动到 "0102" 时这个锁就会被锁定。作者:力扣 (LeetCo

2020-10-07 10:16:04 205

原创 【LeetCode】墙与门(BFS)

【LeetCode】墙与门题目:你被给定一个 m × n 的二维网格,网格中有以下三种可能的初始化值:-1 表示墙或是障碍物0 表示一扇门INF 无限表示一个空的房间。然后,我们用 231 - 1 = 2147483647 代表 INF。你可以认为通往门的距离总是小于 2147483647 的。你要给每个空房间位上填上该房间到 最近 门的距离,如果无法到达门,则填 INF 即可。示例:给定二维网格:INF -1 0 INFINF INF INF -1INF -1 INF -

2020-10-05 17:03:09 468

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除