分类

算法

LeetCode3-无重复字符的最长子串
滑动窗口 说实话,我第一次做这个题的时候感觉不太好做,滑动窗口理解起来不难,但是套在哈希去实践应用,一上来还真有点难理解逻辑。不过思路大体是相同的。这次就详细说下吧。 首先我们把这个字符串S放到数组chars里。 然后我们定义窗口左边界,left = 0,然后我们定义一个ans用来记录最大字串数。
2026-09-18
|
1
|
0
|
0
LeetCode3-无重复字符的最长子串
LeetCode15-三数之和
乍一看三个数三指针好复杂,其实这题本质也是双指针,我们可以固定一个数,然后去动其余两个数 需要注意拿到一组三元组后,要先将左右指针移动一位,再进行去重操作,虽说颠倒顺序不影响结果,但是逻辑有点混乱. 其次就是因为我们用了Array.sort(nums)排序,所以对于sum于target不同的大小对比
2026-09-18
|
2
|
0
|
0
LeetCode15-三数之和
力扣hot5-盛最多水的容器
对撞双指针,根据贪心思想局部最优即为全局最优,则面积由矮的柱子和两柱子间的距离决定。 时间复杂度 O (n):只遍历数组一遍,左右指针最多相遇一次。 空间复杂度 O (1):只开几个 int 变量,不额外开辟数组 / 哈希表。 class Solution { public int maxA
2026-09-18
|
1
|
0
|
0
力扣hot5-盛最多水的容器
力扣hot4-移动零
这个题是个经典双指针题,一般做法是快指针遍历数组找非零值;慢指针标记非零区域的边界,负责存放找到的非零数字。然后引入中间值交换快慢指针。总之就是不要盯着零,而是盯着非零的数,去把他收集起来。 但是我们想想,如果我们拿到了所有非零值,那是不是数组后面的一定是零?所以其实我们之间从慢指针遍历把后续全部修
2026-09-18
|
2
|
0
|
0
力扣hot4-移动零
力扣hot3-最长连续序列
这道题我记得是哈希题,但是我看到这题的第一反应是借助排序,优点是代码逻辑极其简单,不容易写崩。不过坏处也很明显,排序算法的时间复杂度在O(nlogn),其瓶颈受限于Array.sort(),数据量大的时候该解法时间花费会明显变长,可能达不到要求的线性时间。哈希解法的时间复杂度应该是O(n),不过这里
2026-09-18
|
1
|
0
|
0
力扣hot3-最长连续序列
力扣hot2-字母异位词分组
说白了,就是哈希。 思路其实挺简单的,我们可以遍历数组,对每个数组进行排序,这样每个异位词的字母顺序固然是一样的。然后把他们自己作为key去查map里是否包含这个key,包含的话我们拿到列表写入本次循环拿到的字符串,不包含则是创建新的。 class Solution { public Lis
2026-09-17
|
9
|
0
|
0
力扣hot2-字母异位词分组
梦开始的地方-两数之和
思路 标签:哈希映射 这道题最简单的解法其实是通过暴力枚举,但是这样时间复杂度在 O(n2) 而我们知道哈希查找的时间复杂度为 O(1),所以可以利用哈希容器 map 来降低时间复杂度 遍历数组 nums,i 为当前下标,每个值都判断map中是否存在 target-nums[i] 的 key 值 如
2026-09-17
|
8
|
0
|
0
梦开始的地方-两数之和