这题有点意思,本质上还是可以通过已知index和n的值计算出关于任意nums[index]的值对应的nums数组和的最小值,找到nums[index]与nums数组和的最小值之间的函数关系之后,即可通过遍历或者二分的方法求得最大的nums[index]的值。
class Solution {
public:
double sumindex(int n,int index,double x){
double l=index+1,r=n-index,ans=0;
//l=(l<0)? 0:l;r=(r<0)? 0:r;
ans+=(x>l)? (x+x-l+1)*l/2:(x+1)*x/2+l-x;
ans+=(x>r)? (x+x-r+1)*r/2:(x+1)*x/2+r-x;
return ans-x;//最小值为1没说
}//求出当n和index固定时对于某个x=nums[index],nums数组和的最小值
int maxValue(int n, int index, int maxSum) {
/*遍历换二分
for (int i=1;i<=maxSum;i++){
if (sumindex(n,index,i)>maxSum)
return i-1;
}
*/
int l=1,r=maxSum,mid;
while(l<r){
mid=(l+r+1)>>1;//除2
if (sumindex(n,index,mid)>maxSum)
r=mid-1;
else l=mid;
}
return l;
}
};