题解 | #两数之和#

两数之和

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

//根据代码随想录中的思路:这题我们需要不断地去判断与num对应的target-num是否曾经在数组里出现过。这种需要去“判断一个元素是否曾经出现过”的情况非常需要用哈希表来做。
//而且,由于本题还希望你知道每个曾经出现过的元素的下标,因此只用set不够,还得用map。
#include <unordered_map>
#include <vector>
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        unordered_map<int, int>record;//key为num,value为下标。
        vector<int>result;
        for(int i=0;i<numbers.size();i++)
        {
            int delta=target-numbers[i];//该num的差
            if(record.count(delta)==1)//如果该num的差曾经出现过。就说明数组中已经有两数之和等于target的组合出现了。可以返回了。
            {
                int firstIndex=record.find(delta)->second;
                int secondIndex=i;
                result.push_back(firstIndex+1);
                result.push_back(secondIndex+1);
                break;
            }else {
                record.emplace(numbers[i],i);
            }
        }
        return result;
    }
};

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务