这个题很早以前做过了,思路有的但是python的字典的一些操作记得不清:
#ver_1.0
def twoSum(self, nums: List[int], target: int) -> List[int]:
dict1={}
list1=[]
for j in range(0,len(nums)):
if target-nums[j] in dict1:
list1=[dict1.get(target-nums[j]),j]
else :
dict1[nums[j]]=j
return list1
#ver_2.0
def two_sum(nums, target):
"""这样写更直观,遍历列表同时查字典"""
dct = {}
for i, n in enumerate(nums):
cp = target - n
if cp in dct:
return [dct[cp], i]
else:
dct[n] = i
我一开始的思路就直接全部读一遍存到字典里(按索引:值),然后查找target-num(i)是否在里面,在的话就返回他的键。
但是但是!!!
- python字典中对键值对的操作,一般只有
dict.get(key, default=None)
、dict.values()
、dict.keys()
。如果按照我上面的思路,需要按值查找键(可以实现但比较麻烦)。所以存的时候可以把值作为键来存,位置信息作为值来存,这样我们之间可以遍历键查找到满足需求的位置i,从而简化了操作。 - 按照上面的思路先读进去,要一个for循环,找一次又要一个for循环,其实两步可以合成一步做,边找边存的思想。
- 另外,根据值查找键的方法:
s = {'a':100,'b':200,'c':300}
1.print([k for k,v in s.items() if v==200])
2.b=list(s.keys())[list(s.values()).index(200)]
#将字典的值变列表,找目标下标,将键变成列表,根据刚才的下标求得值
3.new_dict={v:k for k,v in s.items()}
print(new_dict)
print(new_dict[200])
#创建新字典,在字典中查询值,但是有时候值会重复,转为字典后只有一个