我收到了这个面试问题,但我不知道如何解决它:
给出一个大小为N的整数数组A.对于索引0< = P< = Q< 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);
喜欢这个吗?
提前致谢。
答案 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
。