簡體   English   中英

在Leetcode上提交C ++代碼時超出時間限制錯誤

[英]Time Limit Exceeded error when submitting c++ code on Leetcode

我正在解決一個leetcode問題,當我運行它時代碼可以正常工作,但是提交代碼時出現Time Limit Exceeded錯誤。 我仔細檢查了代碼,但沒有發現任何無限循環。 誰能幫我看看。

下面是leetcode問題的描述:

我們有一個整數數組A和一個查詢數組查詢。

對於第i個查詢val = querys [i] [0],index = querys [i] [1],我們將val添加到A [index]。 然后,第i個查詢的答案是A的偶數值之和。

(此處,給定的索引= querys [i] [1]是從0開始的索引,每個查詢都將永久性地修改數組A。)

返回所有查詢的答案。 您的答案數組應具有answer [i]作為第i個查詢的答案。

范例1:

輸入:A = [1,2,3,4],查詢= [[1,0],[-3,1],[-4,0],[2,3]]輸出:[8,6, 2,4]說明:數組開頭是[1,2,3,4]。 在A [0]上加1后,數組為[2,2,3,4],偶數之和為2 + 2 + 4 =8。在A [1]上加-3后,數組為[2,-1,3,4],偶數之和為2 + 4 =6。在A [0]加-4之后,數組為[-2,-1,3,4],並且偶數之和為-2 + 4 =2。將2加到A [3]后,數組為[-2,-1,3,6],偶數之和為-2 + 6 = 4 。

class Solution {
public:
    vector<int> sumEvenAfterQueries(vector<int>& A, vector<vector<int>>& queries) {
        vector<int> B;

        for(int i = 0; i < queries.size(); i++)
        {
            int index = queries[i][1];
            A[index] = A[index] + queries[i][0];
            int sum = 0;
            for(int j = 0; j < A.size(); j++)
            {

                if(A[j]%2 == 0)
                {
                    sum = sum + A[j];

                }
            }


            B.push_back(sum);
        }

        return B;
    }
};

由於您的算法過於幼稚,您可能超出了時間限制。 通過重新計算每個查詢的總和,您的程序的時間復雜度為O(M * N),其中M是數組的大小,N是查詢數。

幾乎可以保證測試集將被設計為在幼稚的實現中失敗(超過時間限制)。

絕對沒有必要每次都重新計算總和。 您只需要計算一次

此后,每當您有疑問的時候,你只需要只使用有什么改變來更新當前的總和。 更新時,請使用程序對先前值和新值( ,是否為總和的一部分)的知識。

這樣,您程序的時間復雜度變為O(M + N)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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