哈希表理论基础
一般哈希碰撞有两种解决方法, 拉链法和线性探测法。使用线性探测法,一定要保证tableSize大于dataSize。 当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。 使用哈希表的场景
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法 。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!但是哈希法也是牺牲了空间换取了时间 ,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
242.有效的字母异位词
题目链接:242.有效的字母异位词 ord()函数主要用来返回对应字符的ascii码 ,chr()主要用来表示ascii码对应的字符他的输入时数字 时间复杂度: O(n)、空间复杂度: O(1)(因为定义的是常量大小的数组)
class Solution ( object ) :
def isAnagram ( self, s, t) :
"""
:type s: str
:type t: str
:rtype: bool
"""
record = [ 0 ] * 26
for i in s:
record[ ord ( i) - ord ( 'a' ) ] += 1
for j in t:
record[ ord ( j) - ord ( 'a' ) ] -= 1
for k in record:
if k!= 0 :
return False
return True
349. 两个数组的交集
class Solution ( object ) :
def intersection ( self, nums1, nums2) :
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
max_num = 0
for num1 in nums1:
if num1 > max_num:
max_num= num1
for num2 in nums2:
if num2 > max_num:
max_num= num2
record = [ 0 ] * ( max_num + 1 )
for num1 in nums1:
record[ num1] = 1
for num2 in nums2:
if record[ num2] == 1 :
record[ num2] = 2
result = [ ]
for i in range ( len ( record) ) :
if record[ i] == 2 :
result. append( i)
return result
202. 快乐数
题目链接:202. 快乐数 判断失败的方法:如果sum出现过则说明陷入死循环 取n各位数字的方法:
n, r = divmod ( n, 10 )
for i in str ( n) :
sum += int ( i) ** 2
class Solution ( object ) :
def get_sum ( self, n) :
sum = 0
for i in str ( n) :
sum += int ( i) ** 2
return sum
def isHappy ( self, n) :
"""
:type n: int
:rtype: bool
"""
record = set ( )
new_sum = n
while new_sum not in record:
record. add( new_sum)
print ( new_sum)
if new_sum == 1 :
return True
else :
new_sum = self. get_sum( new_sum)
return False
1. 两数之和
题目链接:1. 两数之和 本来想用set,觉得不好储存下标就放弃了。最后发现可以用nums.index()直接求下标…
class Solution ( object ) :
def twoSum ( self, nums, target) :
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
record = [ float ( 'inf' ) ] * len ( nums)
for i in range ( len ( nums) ) :
if nums[ i] not in record:
record[ i] = target- nums[ i]
else :
return [ record. index( nums[ i] ) , i]