Advertisement
1802. Maximum Value at a Given Index in a Bounded Array
HardView on LeetCode
1802.cs
C#
public class Solution
{
public int MaxValue(int n, int index, int maxSum)
{
maxSum -= n;
int l = 0;
int r = maxSum;
// Find the first value x s.t. if A[index] = x, then sum(A) >= maxSum.
while (l < r)
{
int m = (l + r) / 2;
if (GetSum(n, index, m) >= maxSum)
r = m;
else
l = m + 1;
}
return GetSum(n, index, l) > maxSum ? l : l + 1;
}
// Returns the minimum sum if nums[index] = x.
private long GetSum(int n, int index, int x)
{
long l = Math.Min(index, x - 1);
long r = Math.Min(n - index, x);
long lSum = ((x - 1) + (x - 1 - l + 1)) * l / 2;
long rSum = (x + (x - r + 1)) * r / 2;
return lSum + rSum;
}
}Advertisement
Was this solution helpful?