第一次刷题,一不小心这个题好像看过,题目为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;
}

其实这个题类似于挑战程序设计里面开篇介绍的题,主要是让降低算法的复杂度,因为数据量太小,此处我直接用枚举法搞定,当数据量变的很大时,就要考虑降低复杂度了,挑战程序设计里面的思路是降低循环的层数,此处的话就是变成一层,然后把向量中的数据排序,最后利用二分查找来判别向量中有没有这个数。第一次发博客,文字表达和代码排版都不会。

原文地址:https://www.cnblogs.com/a-dreaming-dreamer/p/5708347.html