找不到人生目标了,想走到人生巅峰了,想叱诧风云,睥睨九州了,那就来leetcode刷题吧。行了,leetcode官方见到上一条广告,不要忘了交个广告费。
leetcode第一题
想法还是for循环,不过为了看起来不那么弱,用了点迭代器知识
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int pre, next = 0;
vector<int>data;
vector<int>::iterator iter;
vector<int>output_data;
int location_last;
for (int j = 0; j < nums.size(); j++)
{
pre = nums[j];
next = target - pre;
iter = find(nums.begin()+j+1, nums.end(), next);
output_data.push_back(j);
if (iter==nums.end())
{
output_data.pop_back();
}
else
{
location_last = distance(std::begin(nums), iter);
output_data.push_back(location_last);
return output_data;
}
}
return vector<int>();
}
};
期间出现过某些问题,比如
让我明白了要考虑全面,作为一个非void的函数,要考虑所有的返回情况,所以要有return vector<int>()
此题中find函数是新学会的一个函数,为了保证它的搜索范围是随着寻找值而改变,最好采用nums.begin()+j+1,不断寻找。否则对那些数组中有重复值的输入非常的不友好。
然后leetcode中是不需要自己cin的,因为cin被反复报错。。
最后,贴一下find函数的定义
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type distance (InputIterator first, InputIterator last);
其中,first 和 last 都为迭代器,其类型可以是输入迭代器、前向迭代器、双向迭代器以及随机访问迭代器;该函数会返回[first, last)
范围内包含的元素的个数。
最后的最后,第一题都这么砍,未来可期。