目录
2021/5/19
1. 两数之和
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num2idx=dict(zip(nums,range(len(nums))))
for i in range(len(nums)):
# 如果有相同的数 [1,2,3,3,3,3,4] 3-默认会用最后的value
# 所以不用担心[3,3] 6的情况
if(target-nums[i] in num2idx and num2idx[target-nums[i]]!=i):
return [i,num2idx[target-nums[i]]]
return []
128. 最长连续序列
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
hashtable=dict(zip(nums,[0]*len(nums)))
ret=0
# 用过num之后就改v=1
for k,v in hashtable.items():
if(v==0):
cur=1
k1=k # 比K小
k2=k # 比k大
while(k1-1 in hashtable):
k1-=1
cur+=1
hashtable[k1]=1
while(k2+1 in hashtable):
k2+=1
cur+=1
hashtable[k2]=1
#更新
ret=max(ret,cur)
return ret
还是dict的写法直观,但是也可以用两个set来做
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
nums_set=set(nums)
visit_set=set()
ret=0
for n in nums_set:
if(n not in visit_set):
visit_set.add(n)
cur=1
n1=n
while(n1-1 in nums_set):
n1-=1
cur+=1
visit_set.add(n1)
n1=n
while(n1+1 in nums_set):
n1+=1
cur+=1
visit_set.add(n1)
ret=max(ret,cur)