скользящее окно на сумму подмассива (положительные целые числа) - PullRequest
0 голосов
/ 25 января 2020

У меня есть массив натуральных чисел размера n и секретное число, равное сумме хотя бы одного (непрерывного) подмассива ненулевого размера.

Я могу запросить, если число больше или равно секретному номеру в O (1).

При использовании скользящего окна O (n), есть ли случаи, которые приведут к неправильному ответу?

    <precalculations>
        int lb = prefixSum[high-1]+1; //lower bound
        int ub = prefixSum[high]; //upper bound
        int lindex=0, rindex=1, test;
        while (rindex < prefixSum.length && lb!= ub){
            test= prefixSum[rindex]-prefixSum[lindex];
            if(checkSecret(test)){
                //larger or equal to secret, shrink window
                ub = min(ub,test);
                lindex++;
            } else {
                lb = max(lb, test);
                rindex++;
            }
        }
        return ub;
...