【发布时间】:2018-11-18 11:26:06
【问题描述】:
我的解决方案:
#include <bits/stdc++.h>
int main() {
int n;//Size of array
std::cin>>n;
std::vector<long long>vec_int;
int temp = n;
while(n--){
long long k ;
std::cin>>k;
vec_int.push_back(k);
}
n = temp;
int num = 0;
for(int i = 0 ; i < n-1 ; i++){
for(int j = i+1; j<n; j++){
if(i<j && i+j == vec_int[i]+vec_int[j])
num++;
}
}
std::cout<<num;
return 0;
}
我正在扫描大约需要O(n^2) 时间的阵列。在非常大的数组上,问题的时间限制超过了 2 秒的持续时间。我尝试对数组进行排序,但没有走得太远。我怎样才能加快速度?是否可以在O(n) 时间复杂度内做到这一点。
【问题讨论】:
-
因此,对于数组
[2,1,3,8,6,5]、i和j是1和5。对吗? -
另外,在您的代码中
i<j是一个冗余检查。 -
是的。
i上升到倒数第二个元素。j转到最后一个元素。我将删除冗余,但仍然没有解决问题。 -
现在,为什么这被否决了?有什么解释吗?我做错了什么?
-
我没有投反对票,是的,我正在看看是否有更好的解决方案。
标签: c++ arrays algorithm sorting