- 博客(106)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 回顾前面刷过的算法(3)
今天简单描述了一下算法思路并手敲了一下下面三个算法,算法题目是刷不完的,但是解题思想是有限的,我们需要学习的就是解题思想,代码展示如下。
2024-08-02 16:43:54
186
原创 回顾前面刷过的算法(1)
之前刷了几十道简单的算法题,现在进行回顾,主要是为了巩固对每一道算法的理解,每次回顾都可能有新的收获,我回顾的方式主要就是再次理解一遍算法,然后重新手敲一遍,手敲是必须的,光看不写是没用的,记录展示如下。
2024-07-31 17:37:59
130
原创 定个小目标之刷LeetCode热题(46)
思路是,定义一个封装了node的Status对象,其实现Comparable接口,以升序排列所有入队的节点,首先将所有链表的头结点入队,然后一个节点一个节点的构造一个新链表,每出队一个节点后需要入队一个新的节点,代码如下。也是可以的,但是其时间复杂度会随着K的增大而增大,该方式的时间复杂度为。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。今天看一下这道题,比较容易想到的就是。将它们合并到一个有序链表中得到。,其推导方式我就不讲了,这里介绍。
2024-07-24 14:46:05
206
原创 定个小目标之刷LeetCode热题(45)
遍历结束后不一定能得到最长有效括号的长度,因为如果输入的是“((((((()”时,此时如果从左向右遍历maxLength依旧为0,,两次不同方向遍历结束后就可以得到maxLength了,时间复杂度为O(n),空间复杂度为O(1),代码如下。有事会暂停更新,总之慢慢积累,今天看一下这道题,有。,思路就是分别定义两个计数器left和rigth,的字符串,找出最长有效(格式正确且连续)括号。最长有效括号子串是 "()"
2024-07-19 15:59:10
312
原创 定个小目标之刷LeetCode热题(44)
今天看一下这道题目,需要使用动态规划,定义dp[i]数组,dp[i]表示凑成总金额数为 i 至少需要dp[i]个硬币,要求解dp[i],那么dp[0]~dp[i - 1]都是已经求解出来的,转移方程如下。如果没有任何一种硬币组合能组成总金额,返回。其中 coins[j] <= i 的,代码如下。,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。计算并返回可以凑成总金额所需的。
2024-07-10 14:18:15
282
原创 定个小目标之刷LeetCode热题(43)
今天看一下这道题目,之前的算法题目也需要不间断的复习,才能加深印象,本题使用动态规划思想,定义 f(o) 和 g(o),f(o) 表示选中当前节点时能盗取的最大金额,g(o) 表示不选中当前节点时能盗取的最大金额,则有以下递推关系式(l表示左子节点,r表示右子节点)之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为。,小偷能够盗取的最高金额。
2024-07-09 10:51:58
263
原创 定个小目标之刷LeetCode热题(42)
之前有做过前缀和的题目,假设我们要在一数组中寻找连续子数组和为 targetSum 的序列,那么我们可以用 map 记录前缀和 curr 以及出现的次数num,当 map 中存在 curr - targetSum 时说明存在连续子数组和为 targetSum 的序列,代码如下。不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。,求该二叉树里节点值之和等于。今天看这道题目,主要思想是。给定一个二叉树的根节点。
2024-07-08 15:01:27
253
原创 定个小目标之刷LeetCode热题(39)
请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。每次只能向下或者向右移动一步。类型,定义一个二维数组 dp,给定一个包含非负整数的。今天看这道题目,属于。
2024-07-04 14:11:28
232
原创 定个小目标之刷LeetCode热题(37)
按照这个规则遍历二叉树,然后把其存储在数组中,现在是反过来,给出已知先序遍历和中序遍历的两个数组,我们需要把这个二叉树构造出来,具体解题思路看代码。今天看这道题目,首先要先搞懂先序遍历和中序遍历的概念,我记得口诀是。,请构造二叉树并返回其根节点。
2024-07-02 14:31:39
153
原创 定个小目标之刷LeetCode热题(36)
广度遍历利用队列Queue实现,深度遍历利用递归实现,代码如下所示。是指从根节点到最远叶子节点的最长路径上的节点数。今天看这道二叉树遍历相关问题,分为。
2024-07-01 15:38:36
216
原创 定个小目标之刷LeetCode热题(35)
今天看这道题目,如果用现有的栈实现,那么基本可以满足题目要求,但是getMin()函数需要另外实现,可以使用一个辅助栈来实现,就是辅助栈用来记录每个入栈元素对应的最小值,在入栈或者出栈时同步更新辅助栈,代码如下。也可以不使用现有栈,使用链表也能大概实现基本功能,代码如下。操作,并能在常数时间内检索到最小元素的栈。
2024-07-01 15:02:14
363
原创 定个小目标之刷LeetCode热题(34)
通过k固定一个元素,然后两个i,j索引分别从数组两端向中间遍历寻找nums[k] + nums[i] + nums[j] = 0的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。答案中不可以包含重复的三元组。,判断是否存在三元组。今天看这道题目,思路是。
2024-06-29 16:33:06
328
原创 定个小目标之刷LeetCode热题(33)
今天看这道题目,要求实现时间复杂度为O(log n)第一想到的就是。请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。了,二分查找有多种不同写法,我习惯。你必须设计并实现时间复杂度为。如果数组中不存在目标值。
2024-06-28 09:30:00
153
原创 定个小目标之刷LeetCode热题(32)
回溯对于本题来说就是每次操作完数组之后再将其复原。今天看这道题目,先说下思路,主要采用递归。给定一个不含重复数字的数组。
2024-06-27 14:17:52
210
原创 定个小目标之刷LeetCode热题(31)
之中任意元素的全部前缀元素和后缀的乘积都在。之外其余各元素的乘积。今天刷的是这道题,说下大概的思路,时间复杂度内完成此题。
2024-06-26 14:41:20
393
原创 定个小目标之刷LeetCode热题(30)
优化进行求解,简单说一下大概思路,首先遍历数组维护一个pre变量,表示前缀和,然后每次更新前缀和后把其作为key放到map中,value表示其出现的次数,要求某一段子数组的和该如何求解呢?假设pre8表示nums[0]~nums[8]的和,pre5表示nums[0]~nums[5]的和,那么pre8 - pre5表示的含义就是nums[6]~nums[8]的和,所以。,假设currentPre表示当前的前缀和,beforePre表示前面的前缀和,那么。子数组是数组中元素的连续非空序列。
2024-06-25 09:30:00
418
原创 定个小目标之刷LeetCode热题(29)
首先我们要搞清楚这个无序连续子数组的左右边界有什么特征,比如示例1中无序连续子数组是[6, 4, 8, 10, 9],仔细观察会发现6,4是降序,10,9也是降序,在一个升序数组中这都是异常的,由此可知这个。你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。今天刷的是这道题,一次遍历找出无序连续子数组的左右边界即可,简单说下思路。文字有点多,主要是为了加深自己的印象,代码如下。子数组,并输出它的长度。
2024-06-24 14:48:55
343
原创 定个小目标之刷LeetCode热题(28)
是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。最长递增子序列是 [2,3,7,101],因此长度为 4。,找到其中最长严格递增子序列的长度。,并记录其索引pos,然后。直接上代码如下,代码是使用。
2024-06-24 11:00:04
359
原创 定个小目标之刷LeetCode热题(27)
imax = MAX(imax * nums[i], nums[i]),由于本题数组元素范围是整数,即存在负数,最大可能变最小,最小可能变最大,所以除了维护一个max,还需要维护一个imin,imin = MIN(imin * nums[i], nums[i]),在遇到负数时,需要将imax和imin进行交换,画草图如下。这道题,我们可以使用动态规划,假设数组元素范围是>=0,那么递推关系式表示为。知道了思路,代码很容易就能敲出来,代码如下所示。
2024-06-22 15:59:12
360
原创 定个小目标之刷LeetCode热题(24)
主要利用在本题中会有这么一条规律,就是假设那个重复的数字是x,那么在[1,x - 1]里任意一个数y,满足小于等于y(包括本身)的元素个数count一定满足 count <= y,在[x, n - 1]里任意一个数y,满足小于等于y(包括本身)的元素个数count一定满足 count > y,这是因为在[x, n - 1]里多了个重复元素,我们可以使用二分法寻找那个x,代码如下。,把数组元素值当作索引,我们会发现如果有重复元素,那么会形成有环的链表, 如草图。
2024-06-19 09:30:00
219
原创 定个小目标之刷LeetCode热题(23)
通过cache.get(key)获取,如果存在则直接替换该结点的value并把该结点移动到链表头部,否则创建新的结点,把它put到chache中,然后添加到链表头部并且size++,最后判断size是否大于capacity,如果大于则需要移除链表尾部结点,并且需要移除cache中对应的结点,最后size--通过cache.get(key)获取,如果不存在则直接返回-1,否则返回对于key的value并把该结点移动到链表头部。今天写这道题,背过八股文的都应该知道。本题我们采用自己创建。
2024-06-18 10:39:06
419
原创 定个小目标之刷LeetCode热题(22)
这道题最容易想的就是排序后再遍历,但是时间复杂度就不是O(n)了,所以还是得用更优的解法,直接看题解,,文字描述了一遍,试着以这种思路编码,代码如下。
2024-06-17 10:47:17
306
原创 定个小目标之刷LeetCode热题(17)
这是道经典的动态规划问题,然而我还是无从下手,当看了题解之后才发现自己好像又懂了,哈哈,这应该就是菜鸟心理吧,递推关系式的推导过程可以去LeetCode看一下,这里我就不描述了。其中nums[k - 1]是输入的数组,f(k)表示偷前k - 1个房屋能偷得的最大金额,那么用代码描述一下。我们都知道大部分动态规划在空间上都是可以优化的,比如本题,我们只想得到dp[len]的值,在递推结束后。,直接看代码,注释有写优化过程。
2024-06-12 10:57:08
179
原创 定个小目标之刷LeetCode热题(16)
重复上述步骤直到把链表都拆分完,这样这条链表每段长度为2的子链表都是有序的,那么要整条链表有序,我们只需要把subLength扩大并重复上述排序步骤即可,也就是每次拆分排序完。后再次进行拆分排序,直到subLength大于或者等于整条链表的长度,画草图如下所示。代码如下,每行都有解释。
2024-06-11 10:56:49
402
1
这是一个linux文本处理问题
2021-06-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人