簡體   English   中英

減少 C++ 中的運行時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM