第一次刷題,一不小心這個題好像看過,題目為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;
}

其實這個題類似於挑戰程序設計里面開篇介紹的題,主要是讓降低算法的復雜度,因為數據量太小,此處我直接用枚舉法搞定,當數據量變的很大時,就要考慮降低復雜度了,挑戰程序設計里面的思路是降低循環的層數,此處的話就是變成一層,然后把向量中的數據排序,最后利用二分查找來判別向量中有沒有這個數。第一次發博客,文字表達和代碼排版都不會。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM