LeetCode
文章平均质量分 81
7riss
这个作者很懒,什么都没留下…
展开
-
差分数组工具类
其实差分数组和前缀和数组有点相似前缀和主要适用于原始数组不会被修改的情况下,需要频繁查询某个区间的累计和preSum[i]就是nums[0…i-1]所有元素的累加和若求nums[i…j]的累加和,则计算preSum[j+1]-preSum[i]即可差分数组主要适用于频繁对原始数组的某个区间的元素进行增减(即原数组需要频繁改变)diff[i]就是nums[i]-nums[i-1对nums[i…j]的元素加3,只需要先让diff[i]+=3,然后让diff[j+1]-=3即可。原创 2023-07-28 10:09:10 · 312 阅读 · 0 评论 -
数组专题攻破新学习笔记
移除有序数组中的重复项、移除元素、二分查找、在排序数组中查找元素的第一个和最后一个位置、最长回文串、区域和检索-数组不可变原创 2023-07-25 17:28:35 · 442 阅读 · 0 评论 -
链表专题攻破的新学习笔记
相交链表、分割链表、合并k个升序链表、链表的中间节点、环形链表原创 2023-07-21 10:54:59 · 233 阅读 · 0 评论 -
动态规划设计
300. 最长递增子序列最长递增子序列(Longest Increasing Subsequence,简写 LIS)是非常经典的一个算法问题比较容易想到的是动态规划解法,时间复杂度为O(N^2)比较难想到的是利用二分查找,时间复杂度是 O(NlogN)比如说输入,其中最长的递增子序列是,所以算法的输出应该是 4。比如我们想证明一个数学结论,纳闷我们就会先假设这个结论在k原创 2023-05-11 11:02:17 · 769 阅读 · 1 评论 -
动态规划的学习
动态规划问题的一般形式就是求最值。比如求最长递增子序列、最小编辑距离等求最值的核心问题是什么?就是把所有可行的答案穷举出来,然后在其中找最值求解动态规划的核心问题就是穷举。但是问题千变万化,穷举所有可行解并不是一个容易的事,只有列出正确的状态转移方程才能正确地穷举。而且我们需要判断算法问题是否具备最优子结构,即是否能够通过子问题的最值得到原问题的最值另外,动态规划问题存在重叠子问题,如果暴力穷举的话效率会很低,所以我们需要使用备忘录或者DP table来优化穷举过程,避免不必要的计算。原创 2023-05-09 14:30:52 · 1117 阅读 · 0 评论 -
单调队列解决滑动窗口问题
单调队列其实就是一个队列,只是使用了一点巧妙的方法使得队列中的元素全都是单调递增(或单调递减)的单调队列主要解决以下问题:给你一个数组window,已知其最值为A,如果给window中添加一个数B,那么比较一下A和B就可以立即算出新的最值;但如果要从window数组中减少一个数,就不能直接得到最值了,因为如果减少的这个数恰好是A,就需要遍历window中的所有元素重新寻找新的最值。针对这个问题我们可以用优先级队列解决吗?我们都知道优先级队列是一个特殊的队列,专门用来动态寻找最值得。原创 2023-05-08 15:02:19 · 1477 阅读 · 1 评论 -
单调栈的学习
栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。单调栈实际上就是栈,只是利用了一些巧妙的逻辑使得每次新元素入栈后,栈内的元素都保持有序(单调递增或者单调递减)听起来有点像堆(heap)但是不是堆,单调栈用途不太广泛,只处理一类典型的问题下一个更大元素上一个更小元素在这里说的单调栈的模板都是计算每个元素的下一个更大元素,但如果题目让你计算上一个更大的元素或者计算上一个更大或相等的元素又要如何修改对应的模板呢?原创 2023-05-06 17:23:10 · 626 阅读 · 0 评论 -
求中位数?
优先级队列是一种受限的数据结构,只能从堆顶添加/删除元素,我们的addNum方法可以从堆顶插入元素,但是findMedian函数需要从数据中间取,这个功能优先级队列是没办法提供的。我们可以这样实现,当我们想要往large里添加元素,不能直接添加,而是要先往small里添加,然后再把small的堆顶元素加到large中,向small中添加元素同理。但是,TreeSet是一种Set其中不存在重复元素的元素,但是我们的数据流可能输入重复数据,而且计算中位数也是需要算上重复元素的。原创 2023-05-06 14:51:14 · 1400 阅读 · 0 评论 -
归并排序的学习
所有递归的算法,本质上都是在遍历一棵(递归)树,然后在节点(前中后序位置)上执行代码。你要写递归算法,本质上就是要告诉每个节点需要做什么。对于这个专题的归并排序算法,递归的sort函数就是二叉树的遍历函数,而merge函数就是在每个节点上做的事情。原创 2023-03-31 10:53:30 · 321 阅读 · 0 评论 -
二叉搜索树BST的学习
对于 BST 的每一个节点node,左子树节点的值都比node的值要小,右子树节点的值都比node的值大。对于 BST 的每一个节点node,它的左侧子树和右侧子树都是 BST。二叉搜索树并不算复杂,但我觉得它可以算是数据结构领域的半壁江山,直接基于 BST 的数据结构有 AVL 树,红黑树等等,拥有了自平衡性质,可以提供 logN 级别的增删查改效率;还有 B+ 树,线段树等结构都是基于 BST 的思想来设计的。对于每一个节点root,代码值检查了它的左右孩子节点是否符合左小右大的原则;原创 2023-03-31 10:51:30 · 676 阅读 · 0 评论 -
二叉树的学习
二叉树的前序、中序、后序遍历以及层次遍历原创 2023-03-04 15:03:35 · 400 阅读 · 0 评论 -
荷兰国旗问题
荷兰国旗问题原创 2023-02-24 09:46:55 · 98 阅读 · 0 评论 -
LeetCode:移动零
移动零原创 2023-02-23 22:19:55 · 432 阅读 · 0 评论 -
LeetCode: 最小操作次数使数组元素相等
最小操作次数使数组元素相等原创 2023-02-22 10:16:24 · 354 阅读 · 0 评论 -
LeetCode:多数元素、存在重复元素、有效的字母异位词、数组中的重复的数字、丢失的数字
LeetCode:多数元素、存在重复元素、有效的字母异位词、数组中的重复数字原创 2022-04-23 14:39:47 · 467 阅读 · 0 评论