leetCode自学笔记1:两数之和

题解的答案:

   hashmap={}
        for index,num in enumerate(nums):
            another_num=target-num
            if another_num in hashmap:
                return[hashmap[index,another_num]]
            hashmap[num]=index
            return None

作者:smile-96
链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-pythonsan-chong-jie-fa-by-smile-9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在pycharm运行的代码,为了便于理解加了print显示字典的内容。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        hashmap = {}
        for index, num in enumerate(nums):
            another_num = target - num
            if another_num in hashmap:
                return [hashmap[another_num], index]
            hashmap[num] = index
            print(hashmap)
        return None


if __name__ == "__main__":
    a = Solution()
    print(a.twoSum([1, 2, 3, 4, 5, 5], 10))


如果把数组的内容替换为[2, 2, 2, 2, 5, 5], 则运行结果为:

因为键一般是唯一的,如果值重复,则最后的一个键值对会替换前面的,值不需要唯一。
比如:dict = {'a': 1, 'b': 2, 'b': '3'} print(dict)的结果是{‘a’: 1, ‘b’: ‘3’}

总结:两次遍历同一个数组可以通过字典创建索引来解决。

C++解法:

     class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> a;//提供一对一的hash
        vector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器b
        for(int i=0;i<nums.size();i++)
        {
            if(a.count(target-nums[i])>0)//key为target-nums[i]的个数,要么为0,要么为1,为1则存在
            {
                b[0]=a[target-nums[i]];
                b[1]=i;
                break;
            }
            a[nums[i]]=i;//反过来放入map中,用来获取结果下标
        }
        return b;
    };
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值