leetcode1 两数之和two sum PYTHON/C++
程序员文章站
2022-04-04 09:49:18
...
leetcode1 两数之和two sum PYTHON/C++
最近看朋友刷leetcode,突然手痒也想写写了。上次在网上做题还是3年前了。c++也快3年没碰了,python虽然最近天天用但是没做过题。正好试试每道题分别用两种语言来做题。
题目描述
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
下一篇: leetcode 1 两数之和