快速求数组A[i]+A[j]+j-i的最大值

题目

快手面试题,一个随机数数组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;
}
发布了63 篇原创文章 · 获赞 73 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/jjwwwww/article/details/100998609