题目
快手面试题,一个随机数数组A,求A[i]+A[j]+j-i的最大值。
解题思路
简单来说,我们可以把数组分为两部分。
左边:A[0]-0 , A[1]-1 , A[i]-i , … , A[k]-k
右边:A[k+1]+k+1 , A[k+2]+k+2 , … , A[j]+j , … , A[n-1]+n-1
本质上就是在左右两边分别寻找最大值,然后加起来:
int Fun(vector<int> nums){
int res = 0;
for(int i=0,j=1;j<nums.size();++j){
res = max(nums[i]-i+nums[j]+j,res);
if(nums[i]-i < nums[j] - j)
i = j;
}
return res;
}