LeetCode面试常考题:Two Sum
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode面试常考题:Two Sum相关的知识,希望对你有一定的参考价值。
作者:Linux猿
简介:CSDN博客专家,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
关注专栏:LeetCode面试常考100题 (优质好文持续更新中……)
一、题意
给定一个整数数组 nums 和一个整数 target ,找到数组里的两个数的和等于 target,返回这两个数在数组中的下标,假设每个输入都只有一个解决方案,并且不能两次使用相同的元素。可以按任何顺序返回答案。
注意:数组无序。
二、测试样例
输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释:因为 2 + 7 = 9,数字 2和7的在数组中的下标分别为 0和1,所以输出 [0,1]。
二、解题思路
遍历数组 nums,使用哈希表(unordered_map类型)存储数组中遍历过的元素,每遍历一个元素 nums[i],查找哈希表中是否存在 target - nums[i],如果不存在,则将 nums[i] 和 下标 i 存储到哈希表中,如果存在,则返回当前下标以及哈希表中 target - nums[i] 对应的值。
通俗一点的说就是:每次在哈希表中查找 target - nums[i] 是否存在,一直查询到一个结果。
时间复杂度:使用哈希表存储,每次查询的时间是O(1),最多遍历 n 个元素,故时间复杂度为 O(n)。
三、代码实现
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int, int> hashTable; //哈希表
vector<int> ret;
for(int i = 0; i < (int)nums.size(); ++i) { //依次遍历每一个元素
if(hashTable.count(target - nums[i])) {//查找 target - nums[i] 是否存在
ret.push_back(i); // 存储下标
ret.push_back(hashTable[target - nums[i]]); //存储下标
return ret;
}
hashTable[nums[i]] = i;
}
return ret;
}
};
四、题目链接
关注专栏:LeetCode面试常考100题 (优质好文持续更新中……)
以上是关于LeetCode面试常考题:Two Sum的主要内容,如果未能解决你的问题,请参考以下文章