采访 - 具有大小N的整数A的数组,索引0 <= P <= Q <1。 N,写一个函数来找到最大值(A [Q] + A [P] + Q-P)

时间:2018-04-23 18:36:06

标签: algorithm

我收到了这个面试问题,但我不知道如何解决它:

给出一个大小为N的整数数组A.对于索引0&lt; = P&lt; = Q&lt; N,写一个找到(A [Q] + A [P] + Q-P)最大值的函数。 预期的时间复杂度是O(N)和O(1)空间。

Java中的解决方案是什么? (用Iraklius解决方案更新)

int[] a = new int[] {3,5,2,1,2};
int max_q=a[a.length-1];
int result = 0;
for(int q=a.length-2; q>=0; q--) {
    result = Math.max(result, max_q + a[p]-p);
    max_q = Math.max(max_q,a[q]+q);
}
System.out.println(result);

喜欢这个吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

从数组的右端开始,并维护一个变量,让我们调用max_q,这将是您考虑过的A[Q] + Q个值的最大值。最初为max_q = A[N - 1],更新规则为max_q = max(max_q, A[i] + i)。现在考虑选择i-th元素作为P,因此答案为result = max(result, max_q + A[i] - i)。您应该先更新result,然后更新max_q