LeetCode 1802. 有界数组中指定下标处的最大值(C++)

news/2024/11/29 4:33:38/

思路:
首先根据题目要求,相邻数字的差距不能大于1,所以数组中的元素分布一定是以最大元素位置为塔顶,向两边发散的金字塔状,最小值为1,这样的结构能保证数组元素和一定是最小的(只有1是重复元素);那么问题就变成一个找最大值numMax的问题,对于该问题,可用分治法实现;
首先最大值一定在1到maxSum之间,那么为了提高效率,肯定采用分治法;在分治的过程中,每代入一个数字就对该数组元素和进行一个判断直到找到一个最大的满足条件的numMax
原题链接:https://leetcode.cn/problems/maximum-value-at-a-given-index-in-a-bounded-array/

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 。

示例 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 <= 109
0 <= index < n

2.代码如下:

class Solution {
public://思路一:贪心 + 分治  实现最大化
/*首先在指定位置为最大值,按照贪心思路:从最大值向两边发散,随坐标元素值-1直到1or边界重点是如何找到那个最大的maxNum能够实现贪心同时sum<maxSum为了找到maxNum,使用二分法,不断地寻找最可能满足条件的最大的maxNumsum可以分为nums[index]+左部分+右部分;左右部分用等差数列计算
*///二分法,不断的寻找能够满足条件的最大的numint maxValue(int n, int index, int maxSum) {int left=1;int right=maxSum;while(left<right){int mid=(left+right+1)/2;//使用二分法,直到找到最大的满足条件的数if(isValid(mid,n,index,maxSum)){left=mid;}else{right=mid-1;}}return left;}// 计算设定的最大值和最大值左右的等差数列是否能够满足条件即不大于最大值maxNumint isValid(int mid,int n,int index,int maxSum){return sumNum(mid,index)+sumNum(mid,n-index-1)+mid<=maxSum;}// 计算最大值为max且单边长度为length的等差数组元素和long sumNum(int max,int length){if(max>length+1){return(long)(max-length+ max-1)*length/2;}// 等差无法占满数组,边界之外的值为1else{int ones=length-(max-1);return (long)max*(max-1)/2+ones;}}
};  

http://www.ppmy.cn/news/18583.html

相关文章

Allegro如何输出第三方网表操作指导

Allegro如何输出第三方网表操作指导 在做PCB设计的时候,会需要输第三方网表,Allegro支持快速输出第三方网表,如下图 具体操作如下 选择File选择Export

TVM: End-to-End Optimization Stack for Deep Learning论文阅读

摘要 很多目前最为流行的深度学习框架&#xff0c;如 TensorFlow、MXNet、Caffe 和 PyTorch&#xff0c;支持在有限类型的服务器级 GPU 设备上获得加速&#xff0c;这种支持依赖于高度特化、供应商特定的 GPU 库。然而&#xff0c;专用深度学习加速器的种类越来越多&#xff0…

「数组」简析

前言 前言&#xff1a;研究一个数据结构的时候&#xff0c;首先讲的是增删改查。 文章目录前言一、一维数组1. 简介1&#xff09;定义2&#xff09;优点3&#xff09;缺点4&#xff09;使用数组的4个步骤2. 操作1&#xff09;访问2&#xff09;数组下标为什么从0开始&#xff1…

可笑 在网页上复制点东西 还需要money?进来看~

前言 哈喽 大家好&#xff01; 我是木易巷&#xff0c;我回来啦&#xff01;&#xff01;&#xff01; 现在好多平台都变成了不开会员不能复制这样的情况。士可杀不可辱&#xff01;作为一个优秀的复制粘贴工程师&#xff0c;在网页上复制点东西&#xff0c;还需要我掏钱&#…

Streamlit如何展示3D模型?

Streamlit 是一个非常好的创建 web demo 的库&#xff0c;但是对于单目深度估计很难找到可以展示 3D 模型的东西。 正如我刚刚在 Jupyter Notebook 中使用 obj2html 库可视化 3D 模型所做的那样&#xff0c;我创建了一个演示&#xff1a;HuggingFacae Spaces Monocular Depth …

详解 C 语言文件操作(上)

目录 一、什么是文件&#xff1f; 1.1 - 文件的基本概念 1.2 - 文件的分类 1.3 - 文件名 二、缓冲文件系统和非缓冲文件系统 三、文件指针类型 四、文件的打开和关闭 4.1 - fopen 4.2 - fclose 一、什么是文件&#xff1f; 1.1 - 文件的基本概念 所谓"文件&quo…

论文投稿指南——中文核心期刊推荐(武器工业)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

SAPIEN PowerShell Studio 介绍

PowerShell Studio是一款优秀的基于PowerShell研发的脚本编辑器&#xff0c;它拥有全新的代码分析、智能预选、xaml支持功能&#xff0c;能够给用户提供一套完整的软件开发环境&#xff0c;让用户能够更加轻松的工作&#xff0c;这样一来大家开发项目的效率就会大大提升。创建模…