Day1__leetcode之两数之和浅析

这个题很早以前做过了,思路有的但是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])
#创建新字典,在字典中查询值,但是有时候值会重复,转为字典后只有一个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值