leetcode hot 100
哈希
两数之和
题意: 在数组中找到两个数,使它们的和等于
target,并返回它们的索引。
解题思路:
- 创建一个
HashMap存储已遍历过的数字及其下标; - 对于当前数字
nums[i],计算target - nums[i]; - 如果这个差值在哈希表中存在,说明之前的某个数与当前数之和等于
target; - 立即返回两个下标。
1 | import java.util.HashMap; |
复杂度:
- 时间复杂度:O(n)
- 空间复杂度:O(n)
字母异位词分组
题意:
给你一个字符串数组 strs,请你将
字母异位词 组合在一起。 字母异位词
是指两个字符串中的字母相同,但排列顺序不同。
返回所有字母异位词的分组(顺序不限)。
示例:
输入:
1 | strs = ["eat", "tea", "tan", "ate", "nat", "bat"] |
输出:
1 | [["bat"], ["nat","tan"], ["ate","eat","tea"]] |
解题思路:
核心思想:
- 异位词排序后是相同的字符串。
- 因此,可以用一个哈希表(
HashMap)来将“排序后的字符串”作为 key,把相同 key 的字符串加入同一个列表中。
步骤:
- 创建一个
HashMap<String, List<String>>。 - 遍历
strs中的每个字符串:- 将其字符排序,得到
key; - 将原字符串放入该
key对应的列表中。
- 将其字符排序,得到
- 最后返回哈希表中所有的 value 列表。
代码实现
1 | import java.util.*; |
复杂度分析:
- 时间复杂度:O(n * k log k) 其中
n是字符串个数,k是每个字符串的最大长度(排序复杂度为k log k)。 - 空间复杂度:O(n * k) 存储所有字符串以及中间哈希表结构。