第一次刷题,一不小心这个题好像看过,题目为Two Sum
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int>a;
int flag = 0;
for(int i=0;i<nums.size()-1;i++)
{
for(int j=i+1;j<nums.size();j++)
{
if((nums[i]+nums[j])==target)
{
a.push_back(i);
a.push_back(j);
int flag = 1;
break;
}
}
if(flag==1)
{
break;
}
}
return a;
}
};
由于代码敲错,导致总是出现运行错误,故用vs调试了一下,这里贴出完成的工程代码:
#include<iostream>
#include <vector>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target);
int main()
{
vector<int>abb;
abb.push_back(3);
abb.push_back(2);
abb.push_back(4);
int ac = 6;
cout<<twoSum(abb, ac).front()<<endl;
cout << twoSum(abb, ac).back() << endl;
return 0;
}
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int>a;
int flag = 0;
for (int i = 0; i < nums.size() - 1; i++)
{
for (int j = i + 1; j < nums.size(); j++)
{
if ((nums[i] + nums[j]) == target)
{
a.push_back(i);
a.push_back(j);
int flag = 1;
break;
}
}
if (flag == 1)
{
break;
}
}
return a;
}
其实这个题类似于挑战程序设计里面开篇介绍的题,主要是让降低算法的复杂度,因为数据量太小,此处我直接用枚举法搞定,当数据量变的很大时,就要考虑降低复杂度了,挑战程序设计里面的思路是降低循环的层数,此处的话就是变成一层,然后把向量中的数据排序,最后利用二分查找来判别向量中有没有这个数。第一次发博客,文字表达和代码排版都不会。