两数之和
哈希,不在哈希表就先存起来
python
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hash_map = {}
for idx, num in enumerate(nums):
a = target - num
if a in hash_map:
return [hash_map[a], idx]
hash_map[num] = idx
return []
字母异位词分组
哈希,用排序后的字符串作分类指标
"".join(sorted(s)):先将s转换成字符列表并排序,之后数据类型转回字符串,作为key
python
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
from collections import defaultdict
hash_map = defaultdict(list)
for s in strs:
key = "".join(sorted(s))
hash_map[key].append(s)
return list(hash_map.values())
最长连续序列
if num - 1 not in num_set:集合中搜索,集合原生支持 x in s,平均时间复杂度 O(1)
python
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
num_set = set(nums)
max_length = 0
for num in num_set:
if num - 1 not in num_set:
current_num = num
current_length = 1
while current_num + 1 in num_set:
current_num += 1
current_length += 1
max_length = max(max_length, current_length)
return max_length
移动零
前指针自循环,若不指向0则后指针跟着前指针走,若指向0则后指针不动,等到前指针不指向0了,再将0换到后面。像一个会"收集0"的滑动窗口,等前指针到头了,则0也收集完了。
python
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
j = 0
for i in range(len(nums)):
if nums[i] != 0:
nums[i], nums[j] = nums[j], nums[i]
j += 1