【leetcode】有界数组中指定下标处的最大值
创始人
2024-05-06 08:47:28
0

题目1802. 有界数组中指定下标处的最大值

题面

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

关键词

二分

思路

整体思路是二分nums[index],设其为target,初始下界leftborder为1,上界rightborder为maxSum,看[0……index]区间的和加上[index …… n-1]区间的和比maxSum要大还是小,大的话令rightborder-1,小的话令leftborder+1.

基本前提是,如果下标index处的值为target,

那么[0……index]区间的值有两种情况:

  • 1 2 3 …… target-2 target-1 target
  • target-index target-index+1 target-index+2 …… target

同样[index …… n-1]区间也分为两种情况:

  • target target-1 …… target - (n-index-1)
  • target target-1 …… 2 1

代码

class Solution {
public:int maxValue(int n, int index, int maxSum) {//左区间和、右区间和、总和long int leftsum,rightsum,sum;//左边界、右边界long int leftborder,rightborder;leftborder = 1;rightborder = maxSum;//nums[index]处的值long int target;//二分查找while(leftborder<=rightborder){target = (leftborder+rightborder)/2;//左区间的两种情况的和if(target>index)leftsum = (2*target-index)*(index+1)/2;elseleftsum = (1+target)*target/2+(index-target+1);//右区间的两种情况的和if(target>(n-index))rightsum = (target*2-n+index+1)*(n-index)/2;elserightsum = (1+target)*target/2+(n-index-target);//减去target是因为左右区间计算了两次nums[target]的值sum = leftsum+rightsum-target;// cout<<"leftboreder: "<maxSum)rightborder = target-1;else if(summaxSum)return target-1;elsereturn target;}
};

总结

看了题目下面的提示才有的二分的思路,还要继续努力。

分情况讨论target与左右边界的关系还是比较麻烦,看评论区有比较巧妙的思路,不知道能不能学会。

参考

相关内容

热门资讯

安卓系统短消息提醒,安卓系统短... 你有没有发现,手机里的短消息提醒功能有时候就像一个贴心的管家,有时候又像个爱闹腾的小孩子?今天,咱们...
安卓系统如何跳过密码,安卓系统... 你是不是也和我一样,有时候手机锁屏密码设置得太复杂,每次解锁都要费好大一番力气?别急,今天就来教你怎...
鸿蒙系统功能与安卓,功能对比与... 你知道吗?最近手机圈里可是热闹非凡呢!华为的新操作系统鸿蒙系统(HarmonyOS)一经推出,就引发...
安卓系统卡苹果系统不卡,揭秘两... 你有没有发现,身边的朋友都在争论安卓系统和苹果系统哪个更好?其实,这个问题就像是在问谁家的孩子更聪明...
安卓系统卡解决了吗,安卓系统卡... 你有没有遇到过安卓手机卡顿的问题?是不是每次打开应用都感觉像蜗牛爬行?别急,今天就来聊聊这个让人头疼...
华为安卓系统下载软件,畅享海量... 你有没有想过,手机里的系统就像是我们的大脑,而下载的软件就像是大脑里的各种功能?今天,就让我带你一起...
平板安卓7系统好吗,体验流畅与... 你有没有想过,你的平板电脑的安卓7系统到底怎么样呢?是不是觉得它既熟悉又有点陌生?别急,今天咱们就来...
鸿蒙系统和安卓10,跨时代操作... 你知道吗?最近科技圈可是炸开了锅,因为华为的新操作系统鸿蒙系统横空出世,而且它竟然和安卓10杠上了!...
苹果安卓和鸿蒙系统,三大操作系... 你有没有发现,现在的手机市场就像是一场精彩纷呈的武林大会,各路英雄齐聚一堂,各显神通?没错,说的就是...
鸿蒙怎么还原安卓系统,系统还原... 你是不是也和我一样,对鸿蒙系统里的安卓应用情有独钟呢?最近,不少小伙伴都在问,鸿蒙怎么还原安卓系统?...
荣耀10改回安卓系统,重拾纯净... 你有没有想过,你的荣耀10手机,曾经那般风光无限,如今却想要改回安卓系统呢?这可不是一件小事,得好好...
华为安卓系统设置权限,深度解析... 亲爱的手机控们,你是否曾为手机里那些层出不穷的权限请求而头疼?别急,今天就来给你详细解析一下华为安卓...
安卓刷系统的软件,探索系统升级... 你有没有遇到过手机卡顿、系统老化的问题?别急,今天就来给你安利几款超好用的安卓刷系统软件,让你的手机...
安卓系统投影怎么升级,轻松实现... 你有没有发现,你的安卓系统投影最近有点儿慢吞吞的,是不是也想给它来个升级,让它焕发新生呢?别急,今天...
安卓手机系统怎样加速,享受流畅... 你有没有发现,你的安卓手机最近变得有点“慢吞吞”的?别急,别急,今天就来给你支几招,让你的安卓手机瞬...
安卓系统怎么安装的,安卓系统安... 你有没有想过,你的安卓手机里那些神奇的APP是怎么来的呢?是不是觉得安装个APP就像变魔术一样简单?...
安卓系统下儿童编程,开启编程启... 你有没有想过,在这个科技飞速发展的时代,连小朋友也开始学习编程了呢?没错,就是那个在安卓系统下,孩子...
微信安卓系统转苹果系统,轻松实... 你有没有想过,从微信安卓系统转到苹果系统,这中间的转换过程,就像是一场说走就走的旅行,充满了未知和惊...
如何刷安卓8.0系统,安卓8.... 你有没有想过,让你的安卓手机升级到最新的8.0系统,让它焕发出全新的活力呢?别急,今天我就来给你详细...
安卓系统里查看路由,安卓系统下... 你是不是也和我一样,对家里的无线网络充满了好奇?想知道安卓手机里怎么查看路由器信息?那就跟着我一起探...