给你三个正整数 n、index 和 maxSum 。 你需要构造一个同时满足下述所有条件的数组 nums(下标 从 0 开始 计数):
nums.length == n
nums[i]
是 正整数 ,其中 0 <= i < nabs(nums[i] - nums[i+1]) <= 1
,其中 0 <= i < n-1nums[index]
的值被 最大化返回你所构造的数组中的 nums[index] 。
注意:abs(x) 等于 x 的前提是 x >= 0 ;否则,abs(x) 等于 -x 。
示例 1:
输入:n = 4, index = 2, maxSum = 6
输出:2
解释:数组 [1,1,2,1] 和 [1,2,2,1] 满足所有条件。
不存在其他在指定下标处具有更大值的有效数组。
示例 2:
输入:n = 6, index = 1, maxSum = 10
输出:3
提示:
1 <= n <= maxSum <= 10^9
0 <= index < n
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-value-at-a-given-index-in-a-bounded-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int maxValue(int n, int index, int maxSum) {
if(n==1) return maxSum;//特殊情况
if(n == maxSum)
return 1;
int v = 2;//其余的为1,idx处为2
int s = n+1;
int n1 = index, n2 = n-index-1;//左右两边的长度(不含idx处)
int len1 = 0, len2 = 0;//实际需要被拉起来的区间长度
while(s < maxSum)
{
len1 += (len1 < n1 ? 1 : 0);
len2 += (len2 < n2 ? 1 : 0);
v++;//idx处的数
s += 1 + len1 +len2;//每个数+1
if(len1+len2 == n-1)//全部需要被拉起
break;
}
if(s > maxSum)
return v-1;
int t = (maxSum - s)/n;//还可以每个数增加多少
return v+t;
}
};
12 ms 5.8 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!