欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-04 09:49:18
...

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

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

题目描述

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

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