# 1802. Maximum Value at a Given Index in a Bounded Array ###### tags: `Leetcode` `Binary Search` `Medium` Link: https://leetcode.com/problems/maximum-value-at-a-given-index-in-a-bounded-array/ ## 思路 有很多edge case 1. 因为nums里面的值都是positive 不会有0 所以用 $(首项+末项)*项数$ 公式时要考虑末项有没有可能是0 0要填成1 太复杂了 所以最简单的办法是先```maxSum-=n``` 这样nums里面的所有数都变成原来的-1,那么也就不需要考虑把0填成1的情况了 2. 算出来的sum很有可能超过int ## Code ```java= class Solution { public int maxValue(int n, int index, int maxSum) { maxSum -= n; int start = 0; int end = maxSum+1; while(start<end){ int mid = start+(end-start)/2; long minArraySum = computeMinSum(n, index, mid); if(minArraySum<=maxSum) start = mid+1; else{ end = mid; } } return start; } private long computeMinSum(int n, int index, int a){ int b = Math.max(a-index, 0); long res = (long)(a+b) * (a-b+1) / 2; b = Math.max(a-((n-1)-index), 0); res += (long)(a+b) * (a-b+1) / 2; return (res-a); } } ```