两个数组的交集-LeetCode
两个数组的交集 🎯 问题描述(来源于LeetCode) 描述: 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 说明: 1 <= nums1.length, nums2.length <= 1000 0 <= nums1[i], nums2[i] <= 1000 示例: 示例 1: 12输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2] 示例 2: 123输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9] 也是可通过的 💻 解题思路 思路1:哈希表 思路1:代码实现 12345678910class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: mapd={} result...
两个数组的交集II-LeetCode
两个数组的交集II 🎯 问题描述(来源于LeetCode) 描述: 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 说明: 1 <= nums1.length, nums2.length <= 1000 0 <= nums1[i], nums2[i] <= 1000 示例: 示例 1: 12输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2] 示例 2: 12输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9] 💻 解题思路 思路1:哈希表 思路1:代码实现 1234567891011121314class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: ...
存在重复元素-LeetCode
存在重复元素 🎯 问题描述(来源于LeetCode) 描述: 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 说明: 1 <= nums.length <= 105 -109 <= nums[i] <= 109 示例: 示例 1: 1234567输入:nums = [1,2,3,1]输出:true解释:元素 1 在下标 0 和 3 出现。 示例 2: 1234567输入:nums = [1,2,3,4]输出:false解释:所有元素都不同。 💻 解题思路 思路1:哈希表计数 思路1:代码实现 123456789class Solution: def containsDuplicate(self, nums: List[int]) -> bool: result={} for num in nums: if num in result: ...
存在重复元素II-LeetCode
存在重复元素II 🎯 问题描述(来源于LeetCode) 描述: 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。 说明: 1 <= nums.length <= 105 -109 <= nums[i] <= 109 0 <= k <= 105 示例: 示例 1: 12输入:nums = [1,2,3,1], k = 3输出:true 示例 2: 12输入:nums = [1,2,3,1,2,3], k = 2输出:false 💻 解题思路 思路1:哈希表 思路1:代码实现 12345678910111213class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: result={...
有效的数独-LeetCode
有效的数独 🎯 问题描述(来源于LeetCode) 描述: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 说明: board.length == 9 board[i].length == 9 board[i][j] 是一位数字(1-9)或者 '.' 示例: 示例 1: 1234567891011输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".&q...
设计哈希映射-LeetCode
设计哈希映射 🎯 问题描述(来源于LeetCode) 描述: 不使用任何内建的哈希表库设计一个哈希映射(HashMap)。 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。 int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。 void remove(key) 如果映射中存在 key 的映射,则移除 key 和它所对应的 value 。 说明: 0 <= key, value <= 106 最多调用 104 次 put、get 和 remove 方法 示例: 示例 1: 12345678910111213141516输入:["MyHashMap", "put", "put", "get", &...
前k个高频元素-LeetCode
前k个高频元素 🎯 问题描述(来源于LeetCode) 描述: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案 说明: 1 <= nums.length <= 105 -104 <= nums[i] <= 104 k 的取值范围是 [1, 数组中不相同的元素的个数] 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的 示例: 示例 1: 12输入:nums = [1,1,1,2,2,3], k = 2输出:[1,2] 示例 2: 12输入:nums = [1,2,1,2,1,2,3,1,3,2], k = 2输出:[1,2] 💻 解题思路 思路1:优先队列(通过频率定义优先级) 思路1:代码实现 12345678910111213141516class Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: mapd={...
根据字符出现频率排序-LeetCode
根据字符出现频率排序 🎯 问题描述(来源于LeetCode) 描述: 给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。 返回 已排序的字符串 。如果有多个答案,返回其中任何一个。 说明: 1 <= s.length <= 5 * 105 s 由大小写英文字母和数字组成 示例: 示例 1: 1234**输入:** s = "tree"**输出:** "eert"**解释:** 'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。 示例 2: 1234输入: s = "Aabb"输出: "bbAa"解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确...
数组双指针
数组双指针 基本概念 双指针(Two Pointers):在遍历序列时,同时用两个指针协同访问元素,以高效解决问题。常见类型有三种:同序列相向移动的「对撞指针」、同序列同向移动的「快慢指针」、以及分别指向不同序列的「分离双指针」。 [x] 对撞指针 ✅ 2026-03-16 [x] 快慢指针 ✅ 2026-03-16 [x] 分离双指针 ✅ 2026-03-16
数组滑动窗口
数组滑动窗口 基本概念 在计算机网络中,滑动窗口协议(Sliding Window Protocol)是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。我们所要讲解的滑动窗口算法也是利用了同样的特性。 滑动窗口算法(Sliding Window):在数组 / 字符串上维护一个固定或可变长度的窗口,通过滑动和缩放窗口,动态维护区间内的最优解。 滑动:窗口整体向一个方向移动,通常是向右。 缩放:窗口长度可变时,可以通过移动左指针缩小窗口,或移动右指针扩大窗口。 滑动窗口本质上是双指针(快慢指针)的一种应用,可以理解为用两个指针维护一个区间,动态调整区间范围以满足题目要求。 应用场景: 滑动窗口常用于查找满足某些条件的连续子区间,能将嵌套循环优化为单循环,大幅降低时间复杂度。常见题型包括: 固定长度滑动窗口:窗口大小固定,通常用于统计或查找长度为 k 的区间性质。 可变长度滑动窗口:窗口大小不固定,常用于查找满足条件的最长/最短区间。














