- 博客(34)
- 收藏
- 关注
原创 算法通关村——计算器问题解析
LeetCode227. 给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在[-2,2-1]的范围内。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如eval()示例:输入:s = “3+2*2”输出:7。
2023-12-12 14:44:00 91
原创 算法通关村——滑动窗口高频问题
LeetCode3. 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例:输入:s = “abcabcbb”输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3.要找最长子串,必然要知道无重复字符串的首和尾,然后再从中确定最长的那个,因此至少两个指针才可以,这就想到了滑动窗口思想。这里介绍一种经典的使用Map的思路。定义一个K-V形式的map,key表示的是当前正在访问的字符串,vaule是其下标索引值。我们每访问一个新元素,都将其下标更新成对应的索引值。
2023-12-11 16:32:24 114
原创 算法通关村——原来滑动窗口如此简单
滑动窗口本质上是一种“快慢型”的双指针。在计算机网络课程中,我们接触过滑动窗口协议(Sliding Window Protocol),该协议是TCP实现流量控制等的核心策略之一。除此之外,在于流量控制、熔断、限流、超时等场景下都会首先从滑动窗口的角度来思考问题,例如hystrix、sentinel等框架都使用了这种思想。滑动窗口的思想非常简单,如下图所示,假如窗口的大小是3,当不断有新数据来时,我们会维护一个大小为3的一个区间,超过3的就将新的放入老的一走。
2023-12-11 08:56:46 80
原创 堆在排序中的应用
以最大堆为例,如果删除一个最大堆的堆顶(并不是完全删除,而是跟末尾的节点交换位置),经过自我调整,第2大的元素就会被交换上来,成为最大堆的新堆顶。如下图所示:在删除值为10的堆顶节点后,经过调整,值为9的新节点就会顶替上来;在删除值为9的堆顶节点后,经过调整,值为8的新节点就会顶替上来……由于二叉堆的这个特性,每一次删除旧堆顶,调整后的新堆顶都是大小仅次于旧堆顶的节点。那么只要反复删除堆顶,反复调整二叉堆,所得到的集合就会成为一个有序集合。
2023-11-29 19:39:24 316
原创 算法通关村——数组加法
LeetCode66. 由整数组成的非空数组所表示的非负整数,在其基础上加一。这里最高位数字存放在数组的首位,数组中每个元素只存储数字。并且假设除了整数0之外,这个整数不会以0开头。示例:输入:digits = [1, 2, 3]输出:[1, 2, 4]这题从后向前依次加就行了,如果有进位就标记一下,只有一个位置需要注意:当digits = [9, 9],从后往前加的时候,到了digits[0]的位置计算为0,需要再次进位但是数组的长度不够了。
2023-11-27 09:53:30 304
原创 算法通关村——轻松搞定树的双指针问题
所谓的双指针就是定义了两个变量,在二叉树中有时候需要用至少两个变量才能解决问题,这两个指针可能是针对一棵树,也可能是两棵树,一般与对称、反转和合并相关。
2023-11-05 15:42:10 207 1
原创 算法通关村——n数之和问题解析
本文介绍了LeetCode中n数问题的解题思路,详细介绍了如何去解决两数之和和三数之和的问题,并给出了相应的代码
2023-10-31 11:25:14 276 1
原创 算法通关村第二关——指定区间反转问题解析
指定区间反转其实就是链表反转基础上更进了一步,从整个链表变为了部分链表,其实只用将这部分链表提取出来,就又退还成了链表反转问题,在处理方法上是类似的,只用把一些细节处处理好就可以了。
2023-10-22 00:19:12 494
原创 算法通关村第二关——终于学会链表反转了
本文主要介绍了链表反转问题,给出了解决链表反转的三种方式,分别是借助虚拟节点,直接操作链表和递归,给出了对应方法的图解和具体代码
2023-10-20 16:37:13 535 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人