文章目录
前言
整理力扣刷题思路。
- 语言:python3
- 题库:来自neetcode: link
一、预备知识
1.哈希表
定义
哈希表(Hash Table)是一种常见的数据结构,它提供了快速的数据检索能力。哈希表的核心是哈希函数,它负责将输入(通常是键值)映射到一个索引上,这个索引直接用于访问数据存储数组中的位置。
链接: link
二、解题思路
1.哈希表
217.contains-duplicate
给你一个整数数组 nums 。如果任一值在数组中出现至少两次,返回 true ;如果数组中每个元素互不相同,返回 false 。
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
hashset=set()
for n in nums:
if n in hashset:
return True
hashset.add(n)
return False
1.two sum
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashdic = {}
for i,num in enumerate(nums):
res = target - num
if res in hashdic:
return [hashdic[res],i]
hashdic[num] = i
49.group anagrams
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
premap = {}
for s in strs:
key = ''.join(sorted(s))
if key in premap:
premap[key].append(s)
else:
premap[key] = [s]
return list(premap.values())
2.前缀后缀和
238.product-of-array-except-self
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法,且在 O(n) 时间复杂度内完成此题。
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
ans, tmp = [1] * len(nums), 1
for i in range(1, len(nums)):
ans[i] = ans[i - 1] * nums[i - 1] # 下三角
for i in range(len(nums) - 2, -1, -1):
tmp *= nums[i + 1] # 上三角
ans[i] *= tmp # 下三角 * 上三角
return ans
注:这一题换成求和不使用减法,也可以采用相似的解决方式。
链接: link