前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1802. 有界数组中指定下标处的最大值(思维题)

LeetCode 1802. 有界数组中指定下标处的最大值(思维题)

作者头像
Michael阿明
发布2021-09-06 10:21:15
2850
发布2021-09-06 10:21:15
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

给你三个正整数 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] 。

注意:abs(x) 等于 x 的前提是 x >= 0 ;否则,abs(x) 等于 -x 。

代码语言:javascript
复制
示例 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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 首先全部为1,idx处为2,然后提拉idx处,慢慢向两侧扩展,每次扩展区域需要全部+1
代码语言:javascript
复制
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阿明),一起加油、一起学习进步!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档