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

2026-07-22:最大化特殊下标数目的最少增加次数。用go语言,给定一个长度为 n 的整数数组,如果某个下标 i(不是第一个也不是最后一个)

0
分享至

2026-07-22:最大化特殊下标数目的最少增加次数。用go语言,给定一个长度为 n 的整数数组,如果某个下标 i(不是第一个也不是最后一个)满足它对应的元素比左右邻居都大,那么这个位置就算作“特殊位置”。

你可以多次进行操作,每次操作可以任选一个下标,把该位置的数值加 1。

目标有两个:

  1. 1. 让特殊位置的数量尽可能多。

  2. 2. 在达到这个最大数量的所有方案中,让总的操作次数尽可能少。

要求返回这个最少的总操作次数。

3 <= n <= 100000。

1 <= nums[i] <= 1000000000。

输入: nums = [1,2,2]。

输出: 1。

解释:

从 nums = [1, 2, 2] 开始。

将 nums[1] 增加 1,数组变为 [1, 3, 2]。

最终数组是 [1, 3, 2],有 1 个特殊的下标,这是可达到的最大值。

不可能用更少的操作达到这个数量的特殊的下标。因此,答案是 1。

题目来自力扣3891。

算法的核心思路如下: 1. 最大峰数量的结构分析

  • • 数组首尾不能成为峰,因此候选位置为下标 1 到 n-2。

  • • 两个峰不能相邻,因此峰之间至少间隔 1 个位置。

  • • 最大峰数量只取决于数组长度 n:

    • • 若n 为奇数,候选位置个数 n-2 也是奇数。要达到最大数量,唯一方案是选择所有奇数下标(即 1, 3, 5, …, n-2)。

    • • 若n 为偶数,候选位置个数 n-2 是偶数。达到最大数量的方案有多种:可以全选奇数下标、全选偶数下标,或者在某个分界点之前选奇数下标、之后选偶数下标(中间至少空一个位置,保证不相邻)。

2. 单个峰的代价计算

对于任意候选位置 i,如果要将它变成峰,需要让它严格大于左右邻居。由于只增加 i 本身,所需最小操作次数为:
need = max(0, max(nums[i-1], nums[i+1]) + 1 - nums[i])
这个代价只取决于原始数组,且各候选峰在不相邻的前提下互不干扰(因为它们不会同时增加邻居)。

3. 奇偶性分流与方案枚举 (1) 计算后缀代价数组suf

从右向左,每隔一个位置累加代价。具体从n-2开始,每次i -= 2,直到i > 0

  • • 若n 为奇数,这个循环会恰好覆盖所有奇数下标(因为 n-2 是奇数)。累加结果suf就是唯一最大峰方案的总代价,直接返回。

  • • 若n 为偶数,循环覆盖的是所有偶数下标(n-2 为偶数)。此时suf是“全选偶数下标”方案的总代价,作为初始最优解。

(2) 偶数长度下的切换枚举(仅当 n 为偶数)
  • • 用变量pre表示“当前已选中的前一段奇数下标”的累计代价。

  • • 遍历奇数下标 i = 1, 3, 5, … (直到 n-3):

    • • 将 i 加入奇数段:pre += 代价(i)

    • • 将原本在偶数段中、紧挨着 i 的 i+1 撤销:suf -= 代价(i+1)

    • • 此时方案的结构为:已选奇数下标 [1, i],中间跳过 i+2,后半段继续选偶数下标 [i+3, n-2]。这种结构保证了峰的数量仍然是最大值,且中间有足够间隔。

    • • 用pre + suf更新全局最小代价。

遍历结束后,ans就是在所有达到最大峰数量的方案中的最小总操作次数。

总时间复杂度

整个过程对数组进行了一次或两次线性扫描(计算 suf 一次,n 为偶数时再扫描一次奇数 i),每次操作仅涉及常数时间的数学运算。因此总时间复杂度为 O(n)

总额外空间复杂度

算法只使用了常数个变量(suf,pre,ans, 循环变量等),没有开辟与输入规模相关的辅助数组。因此总额外空间复杂度为 O(1)

Go完整代码如下:

package main

import (
"fmt"
)

func minIncrease(nums []int) int64 {
n := len(nums)
suf := 0
for i := n - 2; i > 0; i -= 2 {
suf += max(max(nums[i-1], nums[i+1])-nums[i]+1, 0)
}

if n%2 > 0 {
// 修改所有奇数下标
return int64(suf)
}

ans := suf // 修改 [2,n-2] 中的所有偶数下标
pre := 0
// 枚举修改 [1,i] 中的奇数下标,以及 [i+3,n-2] 中的偶数下标
for i := 1; i < n-1; i += 2 {
pre += max(max(nums[i-1], nums[i+1])-nums[i]+1, 0)
suf -= max(max(nums[i], nums[i+2])-nums[i+1]+1, 0) // 撤销 i+1,撤销后 suf 对应 [i+3,n-2]
ans = min(ans, pre+suf)
}

return int64(ans)
}

func main() {
nums := []int{1, 2, 2}
result := minIncrease(nums)
fmt.Println(result)
}

Python完整代码如下:

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

def min_increase(nums: list[int]) -> int:
n = len(nums)
# 计算初始 suf:修改从 n-2 开始、步长为 2 的所有位置(偶数下标位置,当 n 为偶数时)
suf = 0
for i in range(n - 2, 0, -2):
suf += max(max(nums[i - 1], nums[i + 1]) - nums[i] + 1, 0)
# 如果 n 是奇数,直接返回 suf
if n % 2 == 1:
return suf
# n 为偶数时,枚举分割点
ans = suf # 初始 ans 为修改所有偶数下标(从 2 到 n-2)
pre = 0
# 枚举修改奇数下标 [1, i] 以及偶数下标 [i+3, n-2]
for i in range(1, n - 1, 2):
pre += max(max(nums[i - 1], nums[i + 1]) - nums[i] + 1, 0)
# 撤销 i+1 位置的贡献,suf 变为对应 [i+3, n-2] 的部分
suf -= max(max(nums[i], nums[i + 2]) - nums[i + 1] + 1, 0)
ans = min(ans, pre + suf)
return ans

# 测试
if __name__ == "__main__":
nums = [1, 2, 2]
result = min_increase(nums)
print(result)

C++完整代码如下:

  



using namespace std;

long long minIncrease(vector& nums) {
int n = nums.size();
long long suf = 0;

// 计算初始 suf:修改从 n-2 开始、步长为 2 的所有位置(偶数下标位置)
for (int i = n - 2; i > 0; i -= 2) {
suf += max(max(nums[i - 1], nums[i + 1]) - nums[i] + 1, 0);
}

// 如果 n 是奇数,直接返回 suf
if (n % 2 == 1) {
return suf;
}

// n 为偶数时,枚举分割点
long long ans = suf; // 初始 ans 为修改所有偶数下标(从 2 到 n-2)
long long pre = 0;

// 枚举修改奇数下标 [1, i] 以及偶数下标 [i+3, n-2]
for (int i = 1; i < n - 1; i += 2) {
pre += max(max(nums[i - 1], nums[i + 1]) - nums[i] + 1, 0);
// 撤销 i+1 位置的贡献,suf 变为对应 [i+3, n-2] 的部分
suf -= max(max(nums[i], nums[i + 2]) - nums[i + 1] + 1, 0);
ans = min(ans, pre + suf);
}

return ans;
}

int main() {
vector nums = {1, 2, 2};
long long result = minIncrease(nums);
cout << result << endl;
return 0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的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.

相关推荐
热点推荐
国际油价大幅回落,回吐盘中3%的涨幅

国际油价大幅回落,回吐盘中3%的涨幅

每日经济新闻
2026-08-11 19:16:07
8月养老金分批下发,山东退休人员做好三项自查,防止延迟发放!

8月养老金分批下发,山东退休人员做好三项自查,防止延迟发放!

白米饭怎么吃
2026-08-11 20:27:35
挖槽!提议火箭4换1!最快速度交易欧文

挖槽!提议火箭4换1!最快速度交易欧文

篮球实战宝典
2026-08-11 23:58:14
3问逼问美社会主义者:废除警察后强奸案谁来管?她语塞

3问逼问美社会主义者:废除警察后强奸案谁来管?她语塞

报错免疫体
2026-08-11 00:24:47
17岁身高1米94、技术细腻,就读清华附中的他会成为“中国哈兰德”?

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

新民周刊
2026-08-11 15:29:35
曾经爆火的四位顶流,如今无戏可拍,真相令人心酸

曾经爆火的四位顶流,如今无戏可拍,真相令人心酸

陈意小可爱
2026-08-10 11:50:38
斯诺克中国公开赛爆冷: 世界第三倒下 争黑遭绝杀 赵心童5-6输张

斯诺克中国公开赛爆冷: 世界第三倒下 争黑遭绝杀 赵心童5-6输张

光辉记
2026-08-12 00:32:37
宇树科技中签号出炉:中签号码共有19414个

宇树科技中签号出炉:中签号码共有19414个

每日经济新闻
2026-08-11 19:05:13
重庆日报道歉了!涉事记者被严肃处理,王先生啥时候出来走两步?

重庆日报道歉了!涉事记者被严肃处理,王先生啥时候出来走两步?

糖逗在娱乐
2026-08-11 14:39:34
事态升级,美国宣告出手,逼中方在黄岩岛认栽,中方做好最坏打算

事态升级,美国宣告出手,逼中方在黄岩岛认栽,中方做好最坏打算

鹤羽说个事
2026-08-11 03:09:09
穆里尼奥神级决策!叫停皇马天才离队,彻底改写伯纳乌命运

穆里尼奥神级决策!叫停皇马天才离队,彻底改写伯纳乌命运

澜归序
2026-08-11 07:11:32
篡改虎皮蛋糕生产日期,产品已全部售出 北京稻香村卢沟桥食品被罚没1492.8元

篡改虎皮蛋糕生产日期,产品已全部售出 北京稻香村卢沟桥食品被罚没1492.8元

信网
2026-08-11 17:51:05
属蛇人留意:8月12-16日,家里若出现这4件事,是生活给你的提醒

属蛇人留意:8月12-16日,家里若出现这4件事,是生活给你的提醒

爱下厨的阿酾
2026-08-11 14:44:09
医生提醒:不要买!不要吃!里面含有硼砂,危害健康,别害了自己

医生提醒:不要买!不要吃!里面含有硼砂,危害健康,别害了自己

荷兰豆爱健康
2026-08-03 00:07:58
感谢詹姆斯:恩比德瘦身成功!2米16的奥拉朱旺诞生了

感谢詹姆斯:恩比德瘦身成功!2米16的奥拉朱旺诞生了

篮球大视野
2026-08-11 17:04:42
60岁大爷每月2次性生活,坚持多年后,体检结果让人意外

60岁大爷每月2次性生活,坚持多年后,体检结果让人意外

医学原创故事会
2026-08-06 20:26:05
程梦圆遗体刚找到,恶心一幕就发生,救援队长急了,有些人真是毫无底线

程梦圆遗体刚找到,恶心一幕就发生,救援队长急了,有些人真是毫无底线

小鋭有话说
2026-08-11 11:57:57
大蒜被点名了!发现:糖尿病人吃大蒜,不必等多久,或有5个变化

大蒜被点名了!发现:糖尿病人吃大蒜,不必等多久,或有5个变化

路医生健康科普
2026-08-08 16:20:03
杰伦·布伦森谈尼克斯揭幕战打勒布朗·詹姆斯的76人队:当然兴奋

杰伦·布伦森谈尼克斯揭幕战打勒布朗·詹姆斯的76人队:当然兴奋

好火子
2026-08-11 23:20:34
下面好疼,放过我!儿媳被公公侵犯6年,儿子撞破奸情怒杀父亲

下面好疼,放过我!儿媳被公公侵犯6年,儿子撞破奸情怒杀父亲

易玄
2026-08-09 10:55:11
2026-08-12 02:12:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1388文章数 79关注度
往期回顾 全部

科技要闻

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

头条要闻

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

头条要闻

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

体育要闻

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

娱乐要闻

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

财经要闻

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

汽车要闻

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

态度原创

家居
教育
游戏
数码
亲子

家居要闻

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

教育要闻

写作训练 | 我听到了楼下磨剪子的吆喝声……

淘宝百亿补贴 港版PS5轻薄款降至3600元:可冲了?

数码要闻

内存涨疯了!卢伟冰:大家一定会感觉REDMI K100 Pro越来越香

亲子要闻

细思极恐!家里有孕妇或孕妇朋友的一定要注意,危险真的无处不在

无障碍浏览 进入关怀版