【Leetcode】1. Two Sum

题目地址:

https://leetcode.com/problems/two-sum/description/

题目描述:

leetcode第一题,给一个整数集合nums,和一个整数target,从集合中找出两个数,使得两数之和等于target,返回

这两个数在集合中的索引。题目默认存在这样的两个数。

解决方案:

最暴力的是两层loop。这里采用的做法,遍历集合nums,对当前数而言,若能在之前的数中找到另一个数与当前数之和等于

target,就算小功告成了。处理方式用一个set容器记录下前面每个数与target的差,以后只需要判断当前数在不在这些差里面即可。

代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        set<int> comp;
        for (size_t i = 0; i != nums.size(); i++) {
            int val = nums.at(i);
            int delta = target - val;
            if (comp.find(val) != comp.end()) {    
                auto it = find(nums.begin(), nums.end(), delta);
                int  first = distance(nums.begin(), it);
                int  second = static_cast<int>(i);
                return {first, second};
            }
            else {
                comp.insert(delta);
            }
        }

        throw::invalid_argument("there is not valid solution");
     }
};

 

posted @ 2018-04-21 19:12  南岛的森林  阅读(118)  评论(0编辑  收藏  举报