网易首页 > 网易号 > 正文 申请入驻

2026-05-31:减小数组使其满足条件的最小 K 值。用go语言,给定一个正整数数组 nums。对任意正整数 k,定义函数 nonPositive(...

0
分享至

2026-05-31:减小数组使其满足条件的最小 K 值。用go语言,给定一个正整数数组 nums。对任意正整数 k,定义函数 nonPositive(nums, k):把数组中所有元素都至少调整到“非正数”(≤0)所需的最少操作次数。一次操作允许选择某个下标 i,并把 nums[i] 减去 k。

你需要找一个整数 k(k 为正)使得 nonPositive(nums, k) <= k²,并返回满足条件的最小 k。

1 <= nums.length <= 10⁵。

1 <= nums[i] <= 10⁵。

输入: nums = [3,7,5]。

输出: 3。

解释:

当 k = 3 时,nonPositive(nums, k) = 6 <= k²。

减少 nums[0] = 3 一次。nums[0] 变为 3 - 3 = 0。

减少 nums[1] = 7 三次。nums[1] 变为 7 - 3 - 3 - 3 = -2。

减少 nums[2] = 5 两次。nums[2] 变为 5 - 3 - 3 = -1。

题目来自力扣3824。

详细过程拆解 一、先彻底搞懂题目核心定义 1. 什么是「一次操作」?

选数组里任意一个数,减去 k
可以对同一个数减多次。

2. 什么是nonPositive(nums, k)

把数组所有数都变成 ≤0所需的最少总操作次数

计算规则(核心公式):
对一个数x,要变成 ≤0,最少需要减多少次 k?
次数 = 向上取整(x / k) → 简化写法:(x - 1) / k(整数除法)

例子:x=7,k=3
(7-1)/3 = 2 → 实际需要 3 次(7→4→1→-2),完全正确。

总操作次数 = 数组每个数的操作次数相加

3. 最终要求

最小的正整数 k,满足:
总操作次数 ≤ k²

输入[3,7,5],输出3

二、整体解题思路(核心思想)

这道题用的是二分查找

  1. 1. 先确定 k 的合理范围(下界、上界),不用从 1 开始暴力试;

  2. 2. 在这个范围内用二分查找,找到最小的满足条件的 k

三、分步骤详细执行过程(以 nums = [3,7,5] 为例) 步骤1:计算数组长度 n

nums = [3,7,5]
n = 3

步骤2:定义「总操作次数计算函数」

给定任意 k,快速算出:把所有数变 ≤0 需要多少次操作。

计算方式:
总操作次数 = n + 所有数 (x-1)/k 之和
(n 是固定偏移量,不影响逻辑)

步骤3:计算 k 的「下界」(最小可能值)

为了不浪费时间,我们不从头找,直接算一个最低起点
下界由两个值取最大:

  1. 1. 数组长度的平方根(向上取整)

  2. 2. 数组总和的立方根(向上取整)

代入计算:
n=3 → √3 ≈ 1.732 → 向上取整 =2
总和=3+7+5=15 → 立方根≈2.466 → 向上取整 =3

取最大:下界 = 3

步骤4:计算 k 的「上界」(最大可能值)

用刚才算出的下界 k=3,代入操作次数函数,算出结果:
操作次数 = 3 + (3-1)/3 + (7-1)/3 + (5-1)/3
= 3 + 0 + 2 + 1 =6

上界 = 这个操作次数的平方根(向上取整)
√6 ≈ 2.45 → 向上取整 =3

最终:
查找范围:左=3,右=3

步骤5:二分查找最小满足条件的 k

现在只需要验证 k=3 是否满足:
总操作次数 ≤ k²

计算:
k=3,k²=9
总操作次数=6 ≤9 ✅ 满足

因为查找范围只有 3 这一个数,直接确定:
最小 k = 3

四、通用完整流程(不局限于示例)

  1. 1.确定计算规则
    每个数 x 变 ≤0 的最少操作次数:(x-1)/k(整数除法)
    总操作次数 = 数组长度 + 所有数操作次数之和

  2. 2.确定二分查找范围

  • • 下界:max(√n 向上取整, 总和立方根向上取整)

  • • 上界:用下界算出的操作次数的平方根向上取整
    这个范围很小,效率极高。

3.二分查找验证
在 [下界, 上界] 里找最小 k
对每个中间值 k,计算总操作次数,判断是否 ≤k²:

  • • 满足 → 尝试找更小的 k

  • • 不满足 → 必须增大 k

4.返回找到的最小 k

五、时间复杂度 & 额外空间复杂度 1. 总时间复杂度

O(n + logM)

  • • n:数组长度,遍历数组计算总和、计算操作次数

  • • logM:二分查找的次数(M是上下界范围,非常小,几乎可以忽略)

因为 n 可以到 10⁵,这个复杂度完全符合题目要求,效率极高。

2. 总额外空间复杂度

O(1)
全程只使用了固定数量的变量(n、sum、left、right、ans 等),没有开辟任何与数组长度相关的额外空间

总结

  1. 1. 解题核心:二分查找 + 快速计算操作次数

  2. 2. 步骤:定范围 → 二分验证 → 找最小k

  3. 3. 时间复杂度:O(n)(高效处理 10⁵ 数据)

  4. 4. 空间复杂度:O(1)(常数空间,无额外开销)

Go完整代码如下:

package main

import (
"fmt"
"math"
"sort"
)

func minimumK(nums []int)int {
n := len(nums)
nonPositive := func(k int)int {
sum := n
for _, x := range nums {
sum += (x - 1) / k
}
return sum
}

sum := 0
for _, x := range nums {
sum += x
}

left := max(int(math.Ceil(math.Sqrt(float64(n)))), int(math.Ceil(math.Cbrt(float64(sum))))) // 答案的下界
right := int(math.Ceil(math.Sqrt(float64(nonPositive(left))))) // 答案的上界
ans := left + sort.Search(right-left, func(k int)bool {
k += left
return nonPositive(k) <= k*k
})
return ans
}

func main() {
nums := []int{3, 7, 5}
result := minimumK(nums)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

import math

def minimumK(nums):
n = len(nums)
def nonPositive(k):
total = n
for x in nums:
total += (x - 1) // k
return total
total_sum = sum(nums)
left = max(
math.ceil(math.sqrt(n)),
math.ceil(total_sum ** (1/3))
)
# Python 需要确保 left 是整数
left = int(left)
right = int(math.ceil(math.sqrt(nonPositive(left))))
# 二分查找
low, high = 0, right - left
while low < high:
mid = (low + high) // 2
k = left + mid
if nonPositive(k) <= k * k:
high = mid
else:
low = mid + 1
ans = left + low
return ans

if __name__ == "__main__":
nums = [3, 7, 5]
result = minimumK(nums)
print(result)

C++完整代码如下:

  





using namespace std;

int minimumK(vector& nums) {
int n = nums.size();

auto nonPositive = [&](int k) -> int {
int sum = n;
for (int x : nums) {
sum += (x - 1) / k;
}
return sum;
};

int sum = 0;
for (int x : nums) {
sum += x;
}

int left = max(
(int)ceil(sqrt((double)n)),
(int)ceil(cbrt((double)sum))
);

int right = (int)ceil(sqrt((double)nonPositive(left)));

// 二分查找
int ans = left;
int low = 0, high = right - left;
while (low < high) {
int mid = (low + high) / 2;
int k = left + mid;
if (nonPositive(k) <= k * k) {
high = mid;
} else {
low = mid + 1;
}
}

ans = left + low;
return ans;
}

int main() {
vector nums = {3, 7, 5};
int result = minimumK(nums);
cout << result << endl;
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
8月11日,人社部养老金调整公布了吗?今年如果不涨了,会怎样?

8月11日,人社部养老金调整公布了吗?今年如果不涨了,会怎样?

陈博世财经
2026-08-11 14:08:15
一针见血!伊布谈阿尔瓦雷斯转会:不是球员背叛,是他的野心超出马竞上限

一针见血!伊布谈阿尔瓦雷斯转会:不是球员背叛,是他的野心超出马竞上限

体育闲话说
2026-08-11 17:42:04
600万吨大豆送到中国,美才发现中计了,中方已成功“借鸡生蛋”

600万吨大豆送到中国,美才发现中计了,中方已成功“借鸡生蛋”

杰丝聊古今
2026-08-12 03:30:01
突然发文“当不了爱豆了”…他这是怎么了?

突然发文“当不了爱豆了”…他这是怎么了?

奋斗在韩国
2026-08-10 13:40:08
越媒:越南出门不用带钱包,像中国一样扫码支付,发展无法想象

越媒:越南出门不用带钱包,像中国一样扫码支付,发展无法想象

趣味萌宠的日常
2026-08-12 00:23:25
卫诗雅:我这辈子最正确的决定,就是在41岁嫁人后没有放弃演戏

卫诗雅:我这辈子最正确的决定,就是在41岁嫁人后没有放弃演戏

飘飘然的娱乐汇
2026-08-10 23:31:43
河南杀疯了!官宣10.01克拉珍稀绿钻,全球仅2颗,品质当世最佳!

河南杀疯了!官宣10.01克拉珍稀绿钻,全球仅2颗,品质当世最佳!

果壳
2026-08-11 19:03:05
贾冰到底说什么难听话了,贾冰发道歉信了,没有责怪偷拍人

贾冰到底说什么难听话了,贾冰发道歉信了,没有责怪偷拍人

西楼知趣杂谈
2026-08-10 18:39:56
南大校花,娇小骨架,小巧身形,简直是无敌存在!

南大校花,娇小骨架,小巧身形,简直是无敌存在!

云端小院
2026-07-25 07:16:54
遭全网抵制!拿没教养当个性的她,终于惹众怒,难怪连郝蕾都嫌弃

遭全网抵制!拿没教养当个性的她,终于惹众怒,难怪连郝蕾都嫌弃

青杉依旧啊啊
2026-08-11 14:41:17
高速服务区“开水间”英文标识竟是“Open Water rooms”,网友吐槽“中文直译闹笑话”,运营单位:将整改

高速服务区“开水间”英文标识竟是“Open Water rooms”,网友吐槽“中文直译闹笑话”,运营单位:将整改

极目新闻
2026-08-11 17:54:06
巨大悲痛!39岁梅西无限期休养:3好友陪伴左右 将起诉阿根廷媒体

巨大悲痛!39岁梅西无限期休养:3好友陪伴左右 将起诉阿根廷媒体

风过乡
2026-08-11 06:28:53
人伦大乱正在毁掉无数中国家庭:3种乱象就在日常,拖垮一家人

人伦大乱正在毁掉无数中国家庭:3种乱象就在日常,拖垮一家人

阿凯销售场
2026-07-04 15:35:28
iPhone18ProMax突然上架:8月11日,正式预售

iPhone18ProMax突然上架:8月11日,正式预售

3C毒物
2026-08-12 01:28:48
山东呆小伙结婚,新娘只有8岁智商,网友:清纯漂亮,谁不喜欢

山东呆小伙结婚,新娘只有8岁智商,网友:清纯漂亮,谁不喜欢

荔子言
2026-08-10 17:08:01
李莉同志简历,因多次预判到美军动作,被美国列入制裁黑名单

李莉同志简历,因多次预判到美军动作,被美国列入制裁黑名单

谈史论天地
2026-04-18 10:35:33
17岁身高1米94、技术细腻,就读清华附中的他会成为“中国哈兰德”?

17岁身高1米94、技术细腻,就读清华附中的他会成为“中国哈兰德”?

新民周刊
2026-08-11 15:29:35
信胜科技:8月12日正式申购,发行价14.35元/股

信胜科技:8月12日正式申购,发行价14.35元/股

面包财经
2026-08-11 18:16:03
韩国第二季度出口2755亿美元创新高 同比增长57.3%

韩国第二季度出口2755亿美元创新高 同比增长57.3%

财联社
2026-08-11 15:25:03
程梦圆失踪,闺蜜迟迟才说出另一张卡,她到底在怕什么?

程梦圆失踪,闺蜜迟迟才说出另一张卡,她到底在怕什么?

阿莱美食汇
2026-08-12 02:28:30
2026-08-12 05:00:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1388文章数 79关注度
往期回顾 全部

科技要闻

AI大战变天:扎克伯格突然回头

头条要闻

网红"雅典娜"失踪3年 好友:她被李姓女网友诱骗至境外

头条要闻

网红"雅典娜"失踪3年 好友:她被李姓女网友诱骗至境外

体育要闻

NBA老顽童,抽着大麻喝着小酒告别了

娱乐要闻

“雅典娜”确认被害 细节令人发指!

财经要闻

AI泡沫的剧本,是2008年的次贷危机?

汽车要闻

闪充/天神之眼B/云辇-C 2027款海豹06售9.99万元起

态度原创

家居
本地
艺术
公开课
军事航空

家居要闻

2026建博会(广州) 公装联探展交流活动

本地新闻

黄州一夜,苏轼写给普通人的月光

艺术要闻

色彩的盛宴,视觉的狂欢:西班牙水彩大师福斯蒂诺·马丁·冈萨雷斯的艺术世界

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

乌克兰袭击俄罗斯炼油厂 已致13死78伤

无障碍浏览 进入关怀版