0

我有一个 Codility 测试要尽快进行。我试图通过使用 LONG 而不是 INT 在代码中找到一个修改以避免 EXTREME LARGE NUMBERS ERROR ......但这没有用。

有没有人尝试过使用 CODILITY 演示测试并获得 100 分?

我浏览了以前的帖子,但没有解决这个特定问题。

我的代码:复杂度 O(N)……我还是得到了 94。

   // you can also use includes for example:
// #include <algorithm>
#include<iostream>
#include<vector>
#include<math.h>

int equi ( const vector<int> &A ) {
if((int)A.size()==0)
    return -1;

long int sum_l = A[0];
long int total_sum =0;

for(int i =0; i<(int)A.size();i++){
    total_sum = total_sum + A[i];
    }

    int flag =0;
    total_sum = total_sum -A[0];

    if(total_sum == 0)
        return 0;

for(int i=1; i<(int)A.size()-1;i++){
    total_sum = total_sum - A[i];
    if(sum_l ==total_sum){
        flag=1;
        return i;
        }
    sum_l= sum_l + A[i];
    }
if(sum_l ==0)
    return (int)A.size()-1;

if(flag ==0)
    return -1;


}
4

2 回答 2

2

我用过long long,没问题。

于 2013-10-15T01:50:39.503 回答
1

试试这个。

    int left = A[0];
    int right = 0;

    for(int i: A){
        right += i;
    }
    right -= left;

    int diff = Math.abs(left - right);
    for (int i = 1; i < A.length-1; i++) {
        left += A[i];
        right -= A[i];
        int a = Math.abs(left - right);
        if(diff > a){
            diff = a;
        }
    }
    return diff;
于 2020-01-27T23:33:10.520 回答