JS_LeetCode10:和为K的子数组 10.和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 前缀和不要想着遍历了,遍历一定会超时的! T T 我们的目标是什么?找出子串! 在数组中随机定位一个子串,假如它满足条件,即和为k。 除了直观的看到它们三个加起来的和等于k,这时候注意观察,这个子串的值其实还可以由红串减去黄串,而红 2025-05-17 LeetCode #前缀和
JS_LeetCode09:找到字符串中所有字母异位词 9.找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 滑动窗口这道题依然是利用滑动窗口的思想。不过这一次的滑动窗口的宽度是固定的,为目标子串的长度。也就是沿着字符串,滑动固定长度的窗口,去比较当前窗口内的字符串是否是子串的异位词。 ?怎么判断是不是异位词呢 这里我首先想到的是将窗口内的子串进行排序, 2025-05-16 LeetCode #滑动窗口
JS_LeetCode08:无重复字符的最长子串 8.无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 滑动窗口本质上也是双指针,它们俩维护了一个窗口,并且窗口可以滑动,也可以伸缩。 它是动态维护子区间的一种算法技巧。 这道题怎么思考呢? 首先left和right指针放在字符串的起始位置,准备出发!谁出发?right指针负责探索!去将满足条件的字符收入窗口,所以right开始出发。但是,我们要怎么 2025-05-15 LeetCode #滑动窗口
JS_LeetCode07:接雨水 7.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 双指针好难,想了好久。T T 首先,接雨水问题细化为每一个单位能存放的雨水,而每个单位的雨水容量取决于: 左方向最高的柱子高度、右方向最高的柱子高度、自身柱子高度 这个很关键!如果左方向和右方向的最高柱子高度比自身柱子高,能够蓄水,并且蓄水的容量为左右方向的最高柱子中的较矮柱子高度 2025-05-15 LeetCode #双指针
JS_LeetCode06:三数之和 6.三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 排序这道题呢,首先三个数的求和为0,将问题简化为遍历每个数nu 2025-05-13 LeetCode #双指针
JS_LeetCode05:盛最多水的容器 5.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 贪心算法总是在当前条件下做出最优选择! 首先,要知道水的容量由长宽高决定,这里的宽固定了,因此取决于长(木板间 2025-05-13 LeetCode #双指针
JS_LeetCode04:移动零 4.移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 双指针属于一种算法技巧,使用两个变量(指针)来同时在一个数组或者字符串上操作,达到高效解决问题的目的。 在这道题,使用快指针去遍历数组,慢指针负责做非零区域的边界,也就是指向最后一个非零数的下一个位置,准备存放新的非零数。这样的话, 2025-05-12 LeetCode #双指针
JS_LeetCode03:最长连续序列 3.最长连续序列 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 Set它是ES6引入的新数据结构,用于存储一组唯一的值。 本质是用哈希表实现的,用于去重和快速查找。 ?和Map的区别 键的类型:没有区别,都是任意类型的值 是否有序:没有区别,都有插入顺序 是否唯一: Set自动去重 2025-05-11 LeetCode #哈希表
JS_LeetCode02:字母异位词分组 2.字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 哈希表字母异位词的共同点是它包括的字母是相同的,将字母进行排序后得到的字符串是相同的。 因此,考虑将排序后的字符串作为键,值就是所有对应的异位词。 使用for循环遍历每一个字符串,对其字母进行排序,如果键已存在,则将字符串加入键对应的 2025-05-11 LeetCode #哈希表
JS_LeetCode01:两数之和 1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 哈希表(对象)哈希表,英文名Hash Table,也叫做散列表。 它是以键值对形式存储数据的数据结构。是数组的扩展,利用了数组根据下标访问 2025-05-11 LeetCode #哈希表