faster implementation of sum ( for Codility test )

前端 未结 22 2103
鱼传尺愫
鱼传尺愫 2021-02-04 11:47

How can the following simple implementation of sum be faster?

private long sum( int [] a, int begin, int end ) {
    if( a == null   ) {
        ret         


        
22条回答
  •  野趣味
    野趣味 (楼主)
    2021-02-04 12:35

    100% O(n) solution in C

    int equi ( int A[], int n ) {
    
        long long sumLeft = 0;
        long long sumRight = 0;
        int i;
    
        if (n <= 0) return -1;
    
        for (i = 1; i < n; i++)
            sumRight += A[i];
        i = 0;
    
        do {
            if (sumLeft == sumRight)
                return i;
    
            sumLeft += A[i];
    
            if ((i+1) < n)
                sumRight -= A[i+1];
            i++;
        } while (i < n);
    
        return -1;
    }
    

    Probably not perfect but it passes their tests anyway :)

    Can't say I'm a big fan of Codility though - it is an interesting idea, but I found the requirements a little too vague. I think I'd be more impressed if they gave you requirements + a suite of unit tests that test those requirements and then asked you to write code. That's how most TDD happens anyway. I don't think doing it blind really gains anything other than allowing them to throw in some corner cases.

提交回复
热议问题