题目地址:
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"); } };