
LeetCode算法刷题
eligible-zzw
这个作者很懒,什么都没留下…
展开
-
17.关于BFS和DFS力扣算法刷题
DFS和BFS原创 2022-11-30 13:53:52 · 446 阅读 · 0 评论 -
16.滑动窗口系列题目(Java使用相似代码解决LeetCode相关题目)--1208. 尽可能使字符串相等、1456. 定长子串中元音的最大数目、239. 滑动窗口最大值
一、算法综述Sliding window algorithm is used to perform required operation on specific window size of given large buffer or array.滑动窗口算法是在给定特定窗口大小的数组或字符串上执行要求的操作。This technique shows how a nested for loop in few problems can be converted to single for loop an原创 2022-01-30 23:20:00 · 191 阅读 · 0 评论 -
15.使用一样的BFS方法(代码几乎一模一样)解决多道LeetCode题目--542题(01矩阵)&&1765题(地图中的最高点)&&994腐烂的橘子
一、综述本文总结自己刷LeetCode中遇到的使用BFS方法解决相同类型的题目。(代码几乎是一模一样)二、01矩阵(LeetCode第542题)class Solution { int[][] dirs = {{-1,0},{1,0},{0,1},{0,-1}}; public int[][] updateMatrix(int[][] mat) { int m = mat.length; int n = mat[0].length; i原创 2022-01-29 16:03:15 · 904 阅读 · 0 评论 -
14.相同的树&&另一棵树的子树&&检查子树&&二叉树中的列表(教你们使用相同的套路快速解决这四道题)
一、相同的树这道题是开胃菜的开始,使用递归进行解决递归三部曲:确定递归函数的参数和返回值因为我们要比较的是两棵树是否相等,所以参数分别是两棵树的根节点,返回值为boolean类型,即两棵树是否相同,相同则返回true,不相同就返回false,代码如下:public boolean isSameTree(TreeNode p, TreeNode q){}确定终止条件要比较两个节点数值相不相同,首先要把两个节点为空的情况弄清楚!否则后面比较数值的时候就会操作空指针了。左节点和右节点原创 2022-01-14 12:30:09 · 173 阅读 · 0 评论 -
13.最为经典的动态规划入门
一、动态规划的简介动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。首先,动态规划和递推有些相似(原创 2021-10-19 11:13:14 · 173 阅读 · 0 评论 -
12.前K个高频元素---使用优先队列和哈希表解决
一、目的写本片博客的目的是为了让自己和大家了解优先队列的用法以及HashMap的两种遍历方式二、首先讲解一下什么是优先队列PriorityQueue保存队列元素的顺序不是它们加入队列的顺序,而是他们的大小(默认poll的顺序是从小到大)。所以使用peek()、poll()函数取出队列中的元素时,不是取出最先存进去的元素而是所有元素中最小的元素。同时PriorityQueue不允许插入null元素,他存储的元素必须是可以比较的对象,否则要指明比较器。PriorityQueue实现自定义比较器Pri原创 2021-09-07 10:43:43 · 308 阅读 · 0 评论 -
10.无重复字符的最长子串---使用滑动窗口方法和哈希表来解决
一、解题方法:滑动窗口1.本题可以使用双层for循环暴力破解,但是时间复杂度很高,会达到O(n^2),所以采用滑动窗口的方法来降低时间复杂度。2.定义一个HashMap数据集合,其中key值为字符,value值为字符位置+1,+1表示从字符位置后一个开始不重复3.我们定义不重复子串的开始位置为start,结束位置为end4.随着end不断遍历向后,会遇到与[start,end]区间内字符相同的情况,此时将字符作为key值,获取其value值,并更新start,此时[start,end]区间内不存在重原创 2021-09-06 16:01:17 · 138 阅读 · 0 评论 -
10.LeetCode第九题--有效的数独--哈希表的经典应用
思路一个简单的解决方案是遍历该 9 x 9 数独 三 次,以确保:行中没有重复的数字。列中没有重复的数字。3 x 3 子数独内没有重复的数字。实际上,所有这一切都可以在一次迭代中完成。方法:一次迭代首先,让我们来讨论下面两个问题:如何枚举子数独?可以使用 box_index = (row / 3) * 3 + columns / 3,其中 / 是整数除法。注意:此处是我做本题时候没有想到的一个点如何确保行 / 列 / 子数独中没有重复项?可以利用 value -> count原创 2021-09-04 17:56:36 · 143 阅读 · 0 评论 -
9.LeetCode第350题---两个数组的交集2
一、目的记录本题的主要目的是想让自己以及大家记住一个Java中的一个函数,可以去除数组中的后面无用的零方法是Arrays.copyOfRange(res,0,index);另外需要注意的是本题与两个数组的交集1中的不同便是本题需要把重复的元素列出来,而1中是不需要列举重复元素,所以1可以使用HashSet方法解答。二、代码如下class Solution { public int[] intersect(int[] nums1, int[] nums2) { Array原创 2021-09-03 16:08:08 · 86 阅读 · 0 评论 -
8.根据中序和后序遍历序列构建二叉树(最为经典的递归解法)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { *原创 2021-08-04 08:31:22 · 185 阅读 · 0 评论 -
7.根据先序和中序遍历序列构建二叉树(最为经典的递归解法)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { *原创 2021-08-04 08:29:36 · 505 阅读 · 0 评论 -
6.字符串解析(LeetCode第394题)
分享一个容易理解的解法,个人觉得官方的不太好理解代码实现class Solution { public String decodeString(String s) { Stack<Integer> numStack = new Stack<>(); Stack<String> strStack = new Stack<>(); String str = "";原创 2021-05-27 11:01:10 · 107 阅读 · 0 评论 -
5.Queue和Deque的区别与联系
java的Deque与Queue1.Queue接口(单向队列)Queue接口,是集合框架Collection的子接口,是一种常见的数据结构,遵循先进先出的原则。是基于链表来进行实现,的单向队列。LinkedList接口,实现了Queue,所以LinkedList,在插入和删除操作,效率会比较高。poll():将队首的元素删除,并返回该元素。peek():返回队首的元素,但不进行删除操作。offer():将元素添加到队尾,如果成功,则返回true。2.Deque接口(双向队列)Deque接口转载 2021-05-25 11:04:28 · 529 阅读 · 0 评论 -
4.二叉树的先序、中序以及后序遍历的递归写法与非递归写法(LeetCode第94、144、145题)
一、递归法这次我们要好好谈一谈递归,为什么很多同学看递归算法都是“一看就会,一写就废”。主要是对递归不成体系,没有方法论,每次写递归算法 ,都是靠玄学来写代码,代码能不能编过都靠运气。本篇将介绍前后中序的递归写法,一些同学可能会感觉很简单,其实不然,我们要通过简单题目把方法论确定下来,有了方法论,后面才能应付复杂的递归。这里帮助大家确定下来递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法!1.确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么原创 2021-05-25 10:49:51 · 281 阅读 · 0 评论 -
3.对角线遍历(LeetCode第498题)
一、题目描述给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,4,7,5,3,6,8,9]解释:算法思想:首先先不考虑反转的问题,在不超过数据范围的情况下,每次row++,col–将matrix[row] [col]加入到一个队列中,之后再将队列中的元素存储到最终要返回的数组中二、算法核心思想及过程1.初始化原创 2021-05-08 09:34:11 · 197 阅读 · 2 评论 -
2.合并区间(LeetCode第56题)
一、题目介绍以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals = [[1,4]原创 2021-05-02 11:12:26 · 290 阅读 · 0 评论 -
1.字母异位词分组(LeetCode第49题)
一、题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]二、算法思路两个字符串互为字母异位词,就是说这两个字符串所包含的字母相同。同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组异原创 2021-04-30 21:07:49 · 145 阅读 · 1 评论