1. two sum
217:
注意:
hashmap = defaultdict(int) #初始值为0
还有 dict.get(i,0) +1,这样也可以创建key,value
defaultdict(float) #初始值为0.0
defaultdict(str) #初始值为“”
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
hashmap = defaultdict(int)
for num in nums:
if hashmap[num] == 1:
return True
hashmap[num] = 1
return False
594
解题思路
利用哈希表存储数组中元素出现的次数
遍历哈希表,如果当前元素+1也在哈希表中,那么计算两者次数之和,保留最大值
class Solution:
def findLHS(self, nums: List[int]) -> int:
hashmap = defaultdict(int)
max = 0
for num in nums:
hashmap[num] += 1
for i in hashmap:
if hashmap.get(i) is not None and hashmap.get(i+1) is not None:
if hashmap.get(i) + hashmap.get(i+1) > max:
max = hashmap.get(i) + hashmap.get(i+1)
return max
注意如何遍历字典:
python遍历字典一共有四种方式
D={‘a’:1,‘b’:2,’b‘:3,’d‘:4}
1. 遍历key值
for key in a:
pritn(key+':'+a[key])
for key in a.keys():
print(key+':'+a[key])
2.遍历value值
for value in a.values():
print(value)
3.遍历字典项
for kv in a.items():
print(kv)
(‘a’,'1')(...)
4.遍历字典键值
for key,value in a.items():
print(key+':'+value)
for (key,value) in a.items():
print(key+':'+value)
class Solution:
def findLHS(self, nums: List[int]) -> int:
dicts={}
res = 0
for num in nums:
dicts[num] = dicts.get(num,0) +1
for key in dicts:
if key +1 in dicts:
res = max(res, dicts[key]+dicts[key+1])
return res
如果没有时间要求:
Nlogn,直接先排序
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
if not nums:
return 0
nums = sorted(nums)
print(nums)
max_l = 1
l = 1
prev = nums[0]
for num in nums[1:]:
if num == prev:
continue
elif num == prev+1:
l += 1
else:
l = 1
prev = num
max_l = max(max_l,l)
return max_l
要求时间为O(n)
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
if not nums:
return 0
nums= set(nums)
l = 1
max_l = 1
for num in nums:
if num-1 not in nums:
l = 1
while num+1 in nums:
l+=1
num = num+1
max_l = max(l,max_l)
return max_l