leetcode1 两数之和two sum PYTHON/C++

leetcode1 两数之和two sum PYTHON/C++

最近看朋友刷leetcode,突然手痒也想写写了。上次在网上做题还是3年前了。c++也快3年没碰了,python虽然最近天天用但是没做过题。正好试试每道题分别用两种语言来做题。

题目描述

leetcode1 两数之和two sum PYTHON/C++_第1张图片

emmmm这描述有点简洁啊,不给个nums,target的值域什么的吗。

题目分析

这个题目原理上还是比间简单的,很容易能想到就是遍历一遍nums,然后找对于其中每个元素n是不是nums中存在target-n,如果存在就可以返回结果。
因为是两数之和,所以如果存在一组解[n,target-n],则在遍历的时候,遍历到n或者taget-n其中靠后的一个时,一定在遍历的时候经过了其中靠前的一个了,所以我们遍历的时候只用搜索前面遇到的元素就好了。我们可以通过一个map/dict来储存遍历过的每个数据。
遍历的时候,先判断这个存不存在taget-n,如果不存在就把n的位置储存下来。直到遇到一个n存在taget-n就可以返回结果了。

注意要先判断是否存在,再把n存下来,不然可能会遇到nums=[3,3] taget=6这样的数据,先存再判断,第二个3,就会把第一个3覆盖了。

代码

c++

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target)
    {
    map<int, int>m;
    int count = 0;
    vector<int> res;
    for (auto n : nums)
    {
        if (m.count(target - n))
        {        
            res.push_back(m[target - n]);
            res.push_back(count);
            break;
        }
        m[n] = count;
        count++;
    }
    return res;
    }
};

python

class Solution:
    def twoSum(self, nums, target):
        """ :type nums: List[int] :type target: int :rtype: List[int] """
        n = {}        
        for x in range(len(nums)):          
             if target - nums[x] in n : 
                res = [n[target - nums[x]] , x]
                return res   
             n[nums[x]] = x

你可能感兴趣的:(刷题)