64,652
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
using namespace std;
pair<bool, int> Solution(vector<int> num)
{
sort(num.begin(), num.end());
for (int i = num.size() - 1; i >= 2; --i)
{
int low = 0, high = i -1;
if (num[i - 1] + num[i - 2] < num[i])
continue;
while (low < high)
{
if (num[low] + num[high] == num[i])
break;
if (num[low] + num[high] > num[i])
--high;
else
++low;
}
if (low < high)
return make_pair(true, num[i]);
}
return make_pair(false, -1);
}
int main()
{
int n;
cin >> n;
vector<int> num(n);
for (int i = 0; i < n; ++i)
cin >> num[i];
pair<bool, int> res = Solution(num);
if (res.first)
cout << res.second << endl;
else
cout << "Not found." << endl;
return 0;
}
时间复杂度O(N^2),还有就是LZ你自己算法的时间复杂度分析错了,你将求和结果保存起来,然后排序,其时间复杂度为O(N^2lgN),
#include <iostream>
#include <algorithm>
using namespace std;
const int maxLen = 10;
void findTwo(int *descSortedArray, int len, int &num1, int &num2)
{
int start = 1, end = len - 1, tmp, sum;
sum = descSortedArray[0];
while(start < end)
{
tmp = descSortedArray[start] + descSortedArray[end];
if(sum == tmp)
{
num1 = descSortedArray[start];
num2 = descSortedArray[end];
return;
}
else if(sum < tmp)
++start;
else
--end;
}
}
int cmp(int a, int b)
{
return a > b;
}
int main()
{
int array[maxLen] = {1, 5, 7, 8, 9, 10, 5, 20, 11, 2}, num1, num2;
sort(array, array + maxLen, cmp); /* 时间复杂度由sort决定 */
findTwo(array, maxLen, num1, num2);
cout << num1 << " " << num2 << endl;
return 0;
}
void findTwo(int *descArray, int len, int &num1, int &num2)
{
int start = 1, end = len - 1, tmp, sum;
sum = descArray[0];
cout << sum << endl;
while(start < end)
{
tmp = descArray[start] + descArray[end];
if(sum == tmp)
{
num1 = descArray[start];
num2 = descArray[end];
return;
}
else if(sum > tmp)
++start;
else
--end;
}
}
时间复杂度由排序决定