Leetcode1802:有界数组中指定下标处的最大值
-
题目:
-
给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums(下标 从 0 开始 计数):
nums.length == n nums[i] 是 正整数 ,其中 0 <= i < n abs(nums[i] - nums[i+1]) <= 1 ,其中 0 <= i < n-1 nums 中所有元素之和不超过 maxSum nums[index] 的值被 最大化 返回你所构造的数组中的 nums[index] 。
-
-
思路:
-
所求的指定下标处的最大值即可转换为以index为中心铺建的最大层数;
-
首先将底层n铺满,自定义初始层数(返回结果)ans=1;
-
然后index逐渐向两边扩展,考虑左右边界问题,每当扩展一次,ans++;
-
当左右边界都填满之后,ans每当将底层n铺满,ans就自增1.
-
-
代码如下:
class Solution {
public int maxValue(int n, int index, int maxSum) {
//说明:所求的指定下标处的最大值即可转换为以index为中心铺建的最大层数
int left = index;
int right = index;
//现将底层铺满,ans初始化为1
int rest = maxSum - n;
int ans = 1;
while (left > 0 || right < n-1){
int length = right - left + 1;
//当剩余数字大于两边长度
if (rest >= length){
//剩余数字将其在铺一层
rest -= length;
//考虑左右的边界问题
left = Math.max(0, left - 1);
right = Math.min(n - 1, right + 1);
//层数自增
ans++;
}else {
break;
}
}
ans += rest/n;
return ans;
}
}
该博客主要介绍了LeetCode第1802题的解决方案。题目要求构造一个长度为n的有界数组,数组元素间的差值不超过1,且所有元素之和不超过maxSum,目标是使index位置的值最大化。思路是首先填充底层,然后以index为中心向两侧扩展,每次扩展更新最大层数。代码中展示了如何动态调整左右边界以达到最大值。
633

被折叠的 条评论
为什么被折叠?



