千家信息网

LeetCode如何解决转变数组后最接近目标值的数组和问题

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关LeetCode如何解决转变数组后最接近目标值的数组和问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1题目描述给定一个整数数组 ar
千家信息网最后更新 2026年11月03日LeetCode如何解决转变数组后最接近目标值的数组和问题

这篇文章将为大家详细讲解有关LeetCode如何解决转变数组后最接近目标值的数组和问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1

题目描述

给定一个整数数组 arr 和一个目标值 target ,返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。如输入arr = [4,9,3], target = 10,输出3,输入arr=[60864,25176,27249,21296,20204],target=56803,输出11361。

2

题解

思路:前缀和,单调性
本题首先要对题目有深入的理解。对于arr[i],数组和S=sum(arr[0:i]+arr[i]*(len(arr)-i)),因此当对arr进行排序后,发现S是关于arr的单调函数,

因此当出现S>=target时,意味着目标值在(arr[i-1],arr[i]]之间。也就是说在(arr[i-1],arr[i]]之间存在一个数x,使得sum(arr[0:i]+x*(len(arr)-i))=target。此时求出的x可能是小数,因为要求满足条件的最小整数,所以根据小数具体值判断上取整还是下取整即可 (类似四舍五入,但当小数部分是0.5时要下取整。找例子具体计算一下就可以理解) 。如果S始终小于target,则根据题目要求返回arr中的最大值。
class Solution:    def findBestValue(self, arr: List[int], target: int) -> int:        arr.sort()        pre = 0        for i in range(0,len(arr)):            if pre+arr[i]*(len(arr)-i)>=target:                x = (target-pre)/(len(arr)-i)                if x%1>0.5: return ceil(x)                else : return floor(x)            pre += arr[i]        return arr[-1]

关于"LeetCode如何解决转变数组后最接近目标值的数组和问题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

数组 目标 目标值 整数 最小 小数 篇文章 题目 问题 单调 之间 更多 输入 输出 不错 实用 最大 四舍五入 个数 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 互联网和科技技术 涨乐互联网科技 高科技与互联网 互联网科技作文 嘟嘟瓜互联网科技 善班互联网科技有限公司 成都玖崟互联网科技有限公司乐商圈怎么样 现代科技和互联网有关系吗 互联网科技创新服务 湖南一路畅行互联网科技 国大互联网教育科技有限公司工作 朱啸虎曾投资哪些互联网科技企业 互联网时代的科技公司 上海互联网科技公司ppt 互联网科技品牌 华人运通互联网科技公司 安徽九吞吴互联网科技有限公司 六子台科技互联网展会 武汉亿视互联网科技有限公司 上海喔噻互联网科技有限公司 涨乐互联网科技 新华互联网科技学院 没上市的科技互联网公司 镁科技互联网资讯平台 丰台科技园 互联网公司 创业天下互联网科技有限公司 保险科技服务互联网营销体系 互联网风格科技公司名称 小牛互联网科技有限公司地址
0