[英]Reduce run-time in C++
最近,由 TCS 組織的 CodeVita 第 9 季正在全球運行。 下面給出了一個問題陳述。
問題描述:
給定一個整數數組 A 和一個 integer K 找到快樂元素的數量。
如果至少存在一個差值小於 K 的元素,則元素 X 是快樂的,即元素 X 是快樂的,如果在范圍 [XK, X+K] 中除了 X 本身之外還有另一個元素。
約束
1 <= N <= 10^5
0 <= K <= 10^5
0 <= A[i] <= 10^9
時限
1
據此,我用 C++ 完成了我的代碼。 這是代碼,
#include<iostream>
#include<math.h>
using namespace std;
int main(){
int siz, x;
cin>>siz;
cin>>x;
if(siz>= 1 && siz<= pow(10, 5) && x>=0 && x<= pow(10, 5)){
int a[siz];
for(int i=0; i<siz; i++){
cin>>a[i];
if(a[i]>=0 && a[i]<= pow(10, 9))
continue;
else
break;
}
int cnt, op = 0, i = 0;
while(i<siz){
cnt = 0;
int dif1 = a[i] - x;
int dif2 = a[i] + x;
for(int j=0; j<siz; j++){
if(a[j]>= dif1 && a[j] <= dif2){
if(a[j] != a[i])
cnt=1;
}
}
if(cnt == 1)
++op;
i++;
}
cout<<op;
}
return 0;
}
它顯示了與想要的相同的 output 但在 CodeVita 平台上,他們不接受顯示“超出時間限制”的代碼。 現在,我不知道如何使這段代碼不超過時間限制。 尋求社區的支持。
您可以利用非常有效的標准庫工具。 如果將值存儲在 std::vector 中,則可以使用 std::sort 對值進行排序。 然后迭代向量,尋找兩個連續元素之間的差異。
它將更有效,因為標准庫算法是有效的。 排序平均可能低至 O(n log n),最終搜索為 O(n)
您的搜索循環是 O(n2),這要糟糕得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.