在整数数组中找到最大的对

Mit*_*101 5 c arrays algorithm performance

如何在大小为n的正整数数组中找到最大的对,但是整数至少在距离k?(例如,如果第一个元素是[i],那么第二个元素应该是[i + k](或更多).)

我试过这个:

int max_sum = 0;
int sum;
for (int i = 0 ; i < n; i++) {
    for( int j = i + k; j < n; j++) {
        sum = arr_sums[i] + arr_sums[j];
        if ( sum > max_sum ) {
            max_sum = sum;

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但对于大型阵列来说太慢了.

gna*_*729 10

在O(n)中做的很简单,而不是像你的解决方案那样做O(n ^ 2).

对于每个j,0≤j<n,计算m [j] ="从[j]到[n-1]的最大元素.".显然m [n-1] = a [n-1],m [j] = max(a [j],m [j + 1]).

然后对于每个i,0≤i<n - k,计算a [i] + m [i + k],并选择其中最大的一个.

显而易见的是,如果不实际存储除m之外的值m [j],如何做到这一点.