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; } }