
LeetCode刷题
文章平均质量分 71
醒了就刷牙
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题零碎知识点整理
【代码】LeetCode刷题零碎知识点整理。原创 2025-02-24 23:14:06 · 1058 阅读 · 0 评论 -
搞定leetcode面试经典150题之50.Pow(x, n)
long N = n;是为了避免n是时取反操作可能引起的溢出问题。如果n的值是,直接取反-n会导致溢出(变成2147483648,超出了int的范围)。将n转换为long,可以确保后续的计算不会溢出,保证了正确性。原创 2025-02-16 21:52:09 · 317 阅读 · 0 评论 -
搞定leetcode面试经典150题之190.颠倒二进制位
这是一个方法,它接受一个整数n(32位)并返回它的反转二进制表示。这段代码利用位运算(按位与、按位或、左移<<、无符号右移>>>)高效地反转了一个 32 位整数的二进制表示。原创 2025-02-15 17:51:47 · 422 阅读 · 0 评论 -
搞定leetcode面试经典150题之 Kadane 算法
为了一定要利用到环形的特点,也就是说针对第i个位置,我们要把i到nums.length - 1 的所有值加起来,在与开头的0到i-1位置的最大值相加,得到这个位置的利用了环形这个特点的最大值。0到i-1位置的最大值还是正常计算,不用说一定要把i到i-1的值都加起来。思路:自己在思考的时候总是站在第i个数的位置思考是否应该加上下一个(第i+1的)数字,但是这样我们没法方便的便利数组,应该反过来想,我们是否应该把上一个位置以及之前结果的和加入到现在的位置的数字作为一个新的结果。这样就形成了动态规划的思想。原创 2024-12-20 15:28:53 · 333 阅读 · 0 评论 -
搞定leetcode面试经典150题之二分查找
链接比如target为8,我们要找到大于等于8的最左边的位置和小于等于8的最右边的位置。注意不一定有target存在于数组中。if(nums[mid] == target){//满足大于等于target,保存位置,用于后续判定res = mid;} else if (nums[mid] > target) {//满足大于等于target,保存位置,用于后续判定res = mid;mid = 0;res = -1;res = mid;原创 2024-12-16 20:51:04 · 650 阅读 · 0 评论 -
Leetcode 面试150题 399.除法求值
在构建完图之后,对于任何一个查询,就可以从起点出发,通过广度优先搜索的方式,不断更新起点与当前点之间的路径长度,直到搜索到终点为止。比如已知a/b和b/c,我们要求a/c,其实就是找到点a,通过广度优先找到b(通过线段X,其值为a/b),再从b找到c(通过线段Y,其值为(a/b)*(b/c))。我们可以将整个问题建模成一张图:给定图中的一些点(点即变量),以及某些边的权值(权值即两个变量的比值),试对任意两点(两个变量)求出其路径长(两个变量的比值)。商业转载请联系作者获得授权,非商业转载请注明出处。原创 2024-12-15 21:42:23 · 358 阅读 · 0 评论 -
搞定leetcode面试经典150题之图
图(Graph):由一组节点和一组边组成。每条边连接两个节点,表示节点之间的关系。无向图(Undirected Graph):边没有方向,边的两端节点是对称的(即边从节点 A 到节点 B 和从节点 B 到节点 A 是等价的)。有向图(Directed Graph 或 Digraph):边有方向,边是从一个节点指向另一个节点的(即边从节点 A 到节点 B 与从节点 B 到节点 A 是不同的)。原创 2024-12-14 15:51:01 · 654 阅读 · 0 评论 -
搞定leetcode面试经典150题之二叉树
节点一个值(或数据)一个指向左子节点的引用一个指向右子节点的引用根节点:二叉树的第一个节点,也就是最上层的节点。每棵树只有一个根节点。子树:树中的任意节点及其所有后代节点称为该节点的子树。每个节点的左子树和右子树本身也是二叉树。叶子节点:没有子节点的节点称为叶子节点。叶子节点是二叉树的终端节点。深度(Depth):节点的深度是指该节点从根节点开始的路径长度。根节点的深度为 0。高度(Height):树的高度是根节点的深度。一个节点的高度是指从该节点到其所有子节点的最大深度。原创 2024-12-13 18:28:17 · 1711 阅读 · 0 评论 -
搞定leetcode面试经典150题之栈
ArrayDeque是Deque接口的一个实现,继承自,提供了常见的队列和栈操作。ArrayDeque适用于那些对性能要求较高的场景,尤其是在不需要线程安全的情况下。ArrayDeque提供了一系列方法来操作双端队列的元素,支持从队列的两端进行插入、删除和查看元素。与其他Deque实现相比,ArrayDeque在处理高效的队列和栈操作时具有明显优势。如果你只是把他当作栈来使用,那就用pollLast()peekLast()t和,不要和push等连用!!!原创 2024-12-13 14:37:37 · 1210 阅读 · 0 评论 -
搞定leetcode面试经典150题之链表
链表是数据结构中一种非常常见且基础的结构,在 Java 中,链表被广泛应用于解决动态数据存储问题。与数组不同,链表的元素(节点)并不需要在内存中是连续存储的,而是通过指针(或引用)将每个节点连接在一起。链表的优势在于其动态大小和灵活的插入、删除操作,适用于需要频繁修改数据的情况,如实现队列、栈等数据结构。双向链表比单向链表有更多的灵活性,可以在两个方向上进行遍历。tips:没有头结点可以自己创建一个头结点来简化问题。反转链表可以作为一种处理手段,在很多题目中进行应用。非常巧妙的递归方法。原创 2024-12-12 21:58:54 · 895 阅读 · 0 评论 -
搞定leetcode面试经典150题之区间
自己的思路:先排序,然后设置number来知道连续的子区间有几个数字方便后续处理。如果当前数字和前面数字不连续,就把前面数字根据number做处理。原创 2024-12-09 17:32:25 · 344 阅读 · 0 评论 -
leetcode coding_tips
【代码】coding_tips。原创 2024-12-08 23:16:52 · 202 阅读 · 0 评论 -
LeetCode面试经典150最优答案汇总
以数量为基准,数量H慢慢增加,就要找到H篇引用大于等于H的。我们可以先对引用量排序,然后从引用量大的一边往另一边找,比如引用量为1,2,3,5,那么H=2时候,从后面找两篇论文满足条件肯定比从前面找好,如果后面都找不到,那前面更不可能,所以for循环应该从大往小循环。如何知道针对某个引用量,有多少篇论文大于这个引用量呢,经过排序后,citiation[i]可以代表i右边的论文引用都大于citation[i]。原创 2024-12-08 22:51:34 · 514 阅读 · 0 评论 -
搞定leetcode面试经典150题之数组
数组是我们接触到的第一种数据结构,也是最常用的,虽然结构很普通,但是因为是连续内存,长度空间可知,所在在考虑效率的场景中效率较高,由于数组没有使用额外的索引,处理上我们一般使用遍历来对其进行加工,一些方法可以将数组中的前后关系或者下标的位置作为辅助记录数据的一种手段。思路:自己在思考的时候总是站在第i个数的位置思考是否应该加上下一个(第i+1的)数字,但是这样我们没法方便的便利数组,应该反过来想,我们是否应该把上一个位置以及之前结果的和加入到现在的位置的数字作为一个新的结果。这样就形成了动态规划的思想。原创 2024-12-07 12:33:10 · 344 阅读 · 0 评论 -
搞定leetcode面试经典150题之矩阵
二维数组的别名就是矩阵,如果说数组是最简单的数据结构的话, 矩阵就是它的扩展,当数据的结构关系使用单一的维度无法承载的时候,我们就尝试利用矩阵进行处理,矩阵就是二维数组,用多一级的索引将数组组织起来。给定一个 m x n 的矩阵,如果其中有一个元素为 0 ,则将其所在的行和列的所有元素都设为 0。优势:该方法是一个常见的原地操作解决方案,时间复杂度为 O(n^2),空间复杂度为 O(1),且不需要额外的空间来存储矩阵的副本。,请按照顺时针的螺旋顺序,返回矩阵中的所有元素。:数组、矩阵、二维数组。原创 2024-12-05 22:00:13 · 825 阅读 · 0 评论 -
搞定leetcode面试经典150题之滑动窗口
滑动窗口可以看作是一种特殊的双指针技术,主要用于动态维护子数组或子串的区间。双指针技术更为通用,可以用于很多不同类型的问题,而滑动窗口更专注于处理那些涉及到区间长度、最值、满足某些条件的子数组的问题。原创 2024-12-03 16:54:16 · 967 阅读 · 0 评论 -
搞定leetcode面试经典150题之双指针
思路就是通过index来记录不是0的数的个数(假设这是个不断扩大的数组),并且遍历到不是0的数就往不是零的(不断扩大的)数组里面添加。双指针:由于数据特征的有序性(大小或者正负),所以可以证明当前节点一定是优于过往节点,从而可以通过数据的维度数量的指针,逐步的迭代收敛最终找到最优解。核心思想是针对现有容器,你应该是去移动比较矮的边,试图找到一个更高的边,来替代矮边才可以找到更大的容器作为现有容器。,编写一个函数将所有的 0 移动到数组的末尾,同时保持非零元素的相对顺序。轴共同构成的容器可以容纳最多的水。原创 2024-12-03 10:32:58 · 950 阅读 · 0 评论 -
搞定leetcode面试经典150题之哈希算法
HashSet:是一个不允许重复元素的集合,它基于HashMap来实现,add()方法通过计算元素的哈希值来确定存储位置,避免元素重复。HashMap:是一个键值对集合,put()方法通过计算键的哈希值来确定存储位置,并将对应的值存储到该位置。哈希函数:哈希表的效率依赖于哈希函数的质量,优秀的哈希函数可以减少哈希冲突,提高操作效率。原创 2024-12-02 13:45:38 · 1667 阅读 · 0 评论 -
Leetcode 面试150题 15. 三数之和 中等
然后针对两数之和扩展到三数之和,自己写的代码如下,但是遇到比如由无数个0组成的数组,会导致超出内存限制(之前是有合理的三个数,就加到最后结果中,然后通过一个Hashset来去除重复的数组),直到加上下面代码。一开始没有整体思路,但是想到了可以确定一个数字,然后变成两数之和问题。然后做了一个leetcode的两数之和的题目。但是代码只打败了10%的人,很差。学习了官方题解的双指针后,好了很多。注意:输出的顺序和三元组的顺序并不重要。:答案中不可以包含重复的三元组。唯一可能的三元组和为 0。原创 2024-12-01 21:17:44 · 295 阅读 · 0 评论 -
贪心算法理论
贪心算法是一种适用于特定类型问题的策略,通过选择局部最优解来构造全局最优解。它简单且高效,但并不是所有问题都能通过贪心算法获得最优解,因此在使用时需要确保问题满足贪心算法的适用条件。原创 2024-11-30 18:51:42 · 1169 阅读 · 0 评论 -
Leetcode 面试150题 189. 轮转数组 中等
然后就修改为了,根据k,分成k步,每次把最后面插入到最前面。后来发现,其实如果k大于数组的长度,k的前面数组长度部分对数组的操作其实是没必要的,相当于一步一步不断从最后插入第一个,操作了一轮,实则没有变化。一开始认为只要新建一个数组,然后根据k把原数组的值先在新数组中填到对应的位置即可,然后把新数组的值赋值到原数组即可。后来,发现k可能比数组长度大,那样的话上面。尽可能想出更多的解决方案,至少有。, k 为8和9,他是不一样的。,将数组中的元素向右轮转。最后得到了自己的答案如下。原创 2024-11-28 15:56:27 · 427 阅读 · 0 评论 -
Leetcode 面试150题 88.合并两个有序数组 简单
官网的双指针,自己的麻烦地方在于没有想到用一个while循环即可实现,自己想的是,判断完了该取哪个数组的值后,在数组中用while连续取值,但是应该是一个while,在这个while里面觉得从哪个数组取值,自己的思路和官方的思路,顺序相反。结果是 [1],nums1 中的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。合并结果是 [1,2,2,3,5,6],其中斜体加粗标注的是 nums1 中的元素。的放入最后结果数组result中,再用双指针,可以直接使用双指针。中,使合并后的数组同样按。原创 2024-11-26 21:50:46 · 488 阅读 · 0 评论 -
让3岁小孩都能理解LeetCode每日一题_3148.矩阵中的最大得分
解释说明:上面的内容的意思是。原创 2024-08-15 21:46:49 · 173 阅读 · 0 评论 -
让3岁小孩都能理解LeetCode每日一题_3132.找出与数组相加的整数II
nums2[i]-nums1[idi]的值都是相同的,是因为题干中提到“执行了上述操作,nums1和nums2相等”,也就是说nums1去掉了两个数后,其每个位置与nums2相应位置的差值是相同的。所以nums2[i]-nums1[idi]的值都是相同的。id0对应{0,1,2}中的一个是因为sums1要去掉两个数,对应其位置也就是去掉两个,而ido0如果对应比2大的数字,比如3,反证,那么说明n个数字的序列的第一个是取自sums1下标为3的位置,那样就去掉了三个位置(即{0,1,2}),是不对的。原创 2024-08-09 16:45:46 · 192 阅读 · 0 评论 -
让3岁小孩都能理解LeetCode每日一题_3131.找出与数组相加的整数I
解题思路:一开始以为从nums1开始遍历,选取第1个数字x,然后用x去nums2去找,但是往下不好想了。查看了下提示1豁然开朗。总结:以后遇到数组中填充数字的题目,我们要想到是否可以通过学过的方法对数组进行改进。提示1是:注意,在对两个数组进行排序之后,每个元素之间应该有一对一的对应关系。原创 2024-08-08 11:01:30 · 245 阅读 · 0 评论 -
让3岁小孩都能理解LeetCode每日一题_3129.找出所有稳定的二进制数组 I
这里对官方答案进行解释:我们首先要知道,我们不是把所有数组生成了才去检测每个数组的子数组,而是再满足子数组条件的前提下,我们慢慢生成整个数组。动态规划问题将会在我的另外一篇博客中详细讲解。原创 2024-08-06 21:29:53 · 994 阅读 · 0 评论 -
LeetCode每日一题_600.不含连续1的非负整数
其他题解涉及动态规划,以后学习了再解题。自己思路:暴力破解,但是超时。原创 2024-08-05 08:58:52 · 244 阅读 · 0 评论 -
LeetCode每日一题_572.另一棵树的子树
Step2:判断一棵树是否是另一棵树的子树这里就是判断一棵树是另一棵树的一部分,也就是说如果是子树,那么这棵小树肯定是这棵大树某一个节点的子节点以及子孙节点组成的一部分。可以用到前面判断相等的方法。假定我们有两棵树的根节点,分别为t1,t2,如果我们判断t1.left和t2是相等的,或者是t1.right和t2是相等的,那么可以判断t2就是t1的子树。注意使用return实现递归思想。Step1:首先我们要知道如何判断两颗树相同,思路就是遍历每个节点,然后判断是否均相等,需要用递归来实现。原创 2024-08-04 07:08:17 · 253 阅读 · 0 评论 -
LeetCode每日一题_3143.正方形中的最多点数
解题思路:自己:先把points里的点拿来求出坐标系的离原点最远的点,然后根据最远距离新建一个数组,然后把points的点都在新建的数组上标记出来。然后再便利从边长为0的正方形开始,里面是否有重复的标签。但是代码写不出来。class Solution { public int maxPointsInsideSquare(int[][] points, String s) { // int[] arr = new int[s.length()]; // int le原创 2024-08-03 09:35:01 · 442 阅读 · 0 评论 -
LeetCode每日一题_3128. 直角三角形
然后我们枚举每一个 1,假设当前 1 在第 i 行第 j 列,那么以当前 1 为直角三角形的直角点,另外两个直角点分别在第 i 行和第 j 列,那么直角三角形的个数就是 (rows[i]−1)×(cols[j]−1),累加到答案中即可。可以先统计每一行和每一列的 1 的个数,记录在数组 rows 和 cols 中。原创 2024-08-02 18:47:33 · 323 阅读 · 0 评论