数组旋转后i*a[i]最大值优化:大数组计算异常求助
数组旋转后i*a[i]之和最大值的计算问题
我要解决的问题是:找出数组经过任意次数顺时针/逆时针旋转后,所有0<=i<=n-1的i*a[i]之和的最大值。目前的Java代码在数组规模≤3000时运行正常,但数组更大时就失效了——1115个测试用例仅通过1110个。我怀疑问题出在迭代计算当前和的逻辑上。
原代码如下:
class Solution { long max_sum(int a[], int n) { long sum=0; long sum1=0; for(int i=0;i<n;i++){ sum=sum+a[i]; sum1=sum1+(a[i]*i); } long sumCurr=sum1; long sumMax=sum1; for(int i=n-1;i>=0;i--){ sumCurr = sumCurr-(n*a[i])+sum; sum1=sumCurr; if(sumCurr>sumMax){ sumMax=sumCurr; } } return sumMax; } }
我也曾尝试修改循环逻辑:
for (int i = 1; i < n; i++) { sumCurr = sumCurr + sum - n * a[n - i]; sum1 = sumCurr; if (sumCurr > sumMax) { sumMax = sumCurr; } }
内容的提问来源于stack exchange,提问作者Mihir Vijay
相关产品推荐
相关产品推荐

