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

2026-07-01:找出最小平衡下标。用go语言,给你一个整数数组 nums。我们要找“平衡下标”里最小的那个下标 i。 对任意下标 i,把数组分成

0
分享至

2026-07-01:找出最小平衡下标。用go语言,给你一个整数数组 nums。我们要找“平衡下标”里最小的那个下标 i。

对任意下标 i,把数组分成左右两部分:

  • • i 左边的所有元素求和,记为 leftSum(如果左边没有元素,那么 leftSum = 0)。

  • • i 右边的所有元素求乘积,记为 rightProd(如果右边没有元素,那么 rightProd = 1)。

如果满足 leftSum == rightProd,则这个 i 就称为“平衡下标”。

最后返回所有满足条件的下标中最小的那个;如果一个都找不到,返回 -1。

1 <= nums.length <= 100000。

1 <= nums[i] <= 1000000000。

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

输出: 1。

解释:

对于下标 i = 1:

左侧总和 = nums[0] = 2

右侧乘积 = nums[2] = 2

由于左侧总和等于右侧乘积,下标 1 是平衡下标。

没有更小的下标满足条件,因此答案是 1。

题目来自力扣3862。

一、分步详细执行流程

数组长度=3,初始状态:
sum=0,mul=1,l=0,r=2
循环条件:l < r,只要左右指针没相遇就持续迭代。

第1轮循环:l=0,r=2,l

比较sum(0)mul(1)0 < 1,走左侧累加分支

  1. 1. 将nums[l]=nums[0]=2加到 sum:sum = 0 + 2 = 2

  2. 2. 左指针右移:l = 0 + 1 = 1
    本轮结束状态:sum=2,mul=1,l=1,r=2

第2轮循环:l=1,r=2,l

比较sum(2)mul(1)2 > 1,走右侧累乘分支

  1. 1. 溢出预判:检查mul * nums[r]是否超 1e14。当前 mul=1,nums[r]=nums[2]=2,1*2=2 < 1e14,无溢出风险

  2. 2. 右侧乘积更新:mul = 1 * 2 = 2

  3. 3. 右指针左移:r = 2 - 1 = 1
    本轮结束状态:sum=2,mul=2,l=1,r=1

循环终止判断

此时 l=1、r=1,l < r条件不成立,跳出循环。

循环后校验平衡条件

判断sum == mul:2 == 2,条件成立,返回当前 l 值 1,和题目输出一致。

二、通用场景完整逻辑拆解(不局限示例) 步骤1:初始化变量

  1. 1. 求和变量 sum 初始为0:代表分割点左侧无元素时的初始和;

  2. 2. 乘积变量 mul 初始为1:代表分割点右侧无元素时的初始乘积;

  3. 3. 左指针 l 从数组最左端0开始;

  4. 4. 右指针 r 从数组最后一个下标len(nums)-1开始。

步骤2:双指针收缩主循环(l < r 持续执行)

每次循环分两种分支判断:

分支A:sum < mul,扩充左侧区间

说明当前分割点偏右,需要把左边下一个元素纳入左侧求和区间:

  1. 1. 左指针指向的元素 nums[l] 累加进 sum;

  2. 2. 左指针 l 向右移动一位,代表候选平衡下标右移一位。

分支B:sum ≥ mul,缩减右侧区间

说明当前分割点偏左,需要把右边下一个元素纳入右侧求积区间:

  1. 1. 溢出校验:判断mul > 1e14 / nums[r]。若成立,代表mul * nums[r]会超出设定上限,乘积会无限变大不可能和有限的sum相等,直接返回-1结束程序;

  2. 2. 无溢出则将 nums[r] 乘入 mul;

  3. 3. 右指针 r 向左移动一位。

循环终止条件

l 和 r 指针重合时停止循环,此时重合位置 l 就是唯一候选平衡下标。
原理:双指针不断收拢区间,最终重合点恰好对应:左边全部是 [0, l-1](累加和sum)、右边全部是 [l+1, end](累乘积mul),完美匹配平衡下标i=l的左右计算规则。

步骤3:循环结束后校验平衡条件

  1. 1. 若 sum(i=l左侧总和)等于 mul(i=l右侧乘积),说明 l 是合法平衡下标,直接返回 l;

  2. 2. 若两者不相等,不存在任何平衡下标,返回 -1。

特殊兜底逻辑说明

当右侧累乘即将溢出 1e14 时直接返回-1:
数组元素最小为1,一旦乘积突破1e14,后续只会越乘越大,而左侧求和是线性增长、增速远慢于乘积,二者永远无法相等,提前剪枝避免无效循环与数值溢出崩溃。

三、时间复杂度分析

整个算法只有一层 while 循环,左指针 l 只向右移动、右指针 r 只向左移动,两个指针合计最多遍历数组全部元素一次,每个元素只会被 l 或 r 访问恰好1次
数组长度记为 n(1 ≤ n ≤ 1e5):

  • • 总操作次数 ≤ n

  • • 时间复杂度:O(n)

四、额外空间复杂度分析

算法仅定义固定数量临时变量:sum、mul、l、r,没有开辟任何随数组长度n变化的数组、切片、哈希表等存储空间,额外空间与输入规模无关。

  • • 额外空间复杂度:O(1)(常数级空间)

Go完整代码如下:

package main

import (
"fmt"
)

func smallestBalancedIndex(nums []int)int {
sum, mul := 0, 1
l, r := 0, len(nums)-1
for l < r {
if sum < mul {
sum += nums[l]
l++
} else {
if mul > 1e14/nums[r] {
return-1
}
mul *= nums[r]
r--
}
}
if sum == mul {
return l
}
return-1
}

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

Python完整代码如下:

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

from typing import List

def smallest_balanced_index(nums: List[int]) -> int:
sum_val = 0
mul_val = 1
l, r = 0, len(nums) - 1
while l < r:
if sum_val < mul_val:
sum_val += nums[l]
l += 1
else:
# 检查乘法是否会溢出
if mul_val > 10**14// nums[r]:
return-1
mul_val *= nums[r]
r -= 1
if sum_val == mul_val:
return l
return-1

if __name__ == "__main__":
nums = [2, 1, 2]
result = smallest_balanced_index(nums)
print(result)

C++完整代码如下:

  


using namespace std;

int smallestBalancedIndex(vector& nums) {
long long sum = 0;
long long mul = 1;
int l = 0, r = nums.size() - 1;

while (l < r) {
if (sum < mul) {
sum += nums[l];
l++;
} else {
// 检查乘法是否会溢出
if (mul > 100000000000000LL / nums[r]) {
return-1;
}
mul *= nums[r];
r--;
}
}

if (sum == mul) {
return l;
}
return-1;
}

int main() {
vector nums = {2, 1, 2};
int result = smallestBalancedIndex(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.

相关推荐
热点推荐
长崎核爆奇闻:日军最强战斗机部队拒绝出战,吃着便当观看蘑菇云

长崎核爆奇闻:日军最强战斗机部队拒绝出战,吃着便当观看蘑菇云

兴趣知识
2026-07-03 00:38:52
摩纳哥王室:两代绝美王妃改善王室基因,王子公主都是高颜值

摩纳哥王室:两代绝美王妃改善王室基因,王子公主都是高颜值

小书生吃瓜
2026-07-02 20:01:52
曼联巴萨全看走眼!当年没人要的废柴,如今世界杯绝杀拯救巴西

曼联巴萨全看走眼!当年没人要的废柴,如今世界杯绝杀拯救巴西

养牛的大昆
2026-07-01 17:10:18
外媒:韩国历史上第二位女总理就任

外媒:韩国历史上第二位女总理就任

参考消息
2026-07-02 11:26:12
郑丽文选对了!“内鬼”想要夺权?国民党1人发声,爆料1个大秘

郑丽文选对了!“内鬼”想要夺权?国民党1人发声,爆料1个大秘

过期少女致幻录
2026-07-03 03:41:23
GDP会骗人,个税不会:谁才是中国真正的高薪之城

GDP会骗人,个税不会:谁才是中国真正的高薪之城

互联网大观
2026-07-02 08:52:16
陈清晨正式签约尤尼克斯,退役后返乡广东自建羽毛球俱乐部

陈清晨正式签约尤尼克斯,退役后返乡广东自建羽毛球俱乐部

小兰看体育
2026-07-02 09:19:47
今年第9号台风“巴威”生成 最强可达超强台风

今年第9号台风“巴威”生成 最强可达超强台风

北青网-北京青年报
2026-07-02 11:26:12
克洛普:当时差点为多特签下德布劳内,但被穆里尼奥干预了

克洛普:当时差点为多特签下德布劳内,但被穆里尼奥干预了

懂球帝
2026-07-03 05:29:21
1. 和女友同居第一天彻底破防,褪去精致女神外衣,我差点选择分手

1. 和女友同居第一天彻底破防,褪去精致女神外衣,我差点选择分手

艺鉴在线
2026-07-03 02:24:02
超越姆巴佩,亚马尔是国家队大赛收获10胜最年轻的欧洲球员

超越姆巴佩,亚马尔是国家队大赛收获10胜最年轻的欧洲球员

懂球帝
2026-07-03 05:46:04
难以置信,北京协和证实:40岁后男性最优运动,并非跑步撸铁

难以置信,北京协和证实:40岁后男性最优运动,并非跑步撸铁

华庭讲美食
2026-06-21 15:26:10
老乡鸡员工被指徒手将地上饭菜捡回餐盘,门店回应

老乡鸡员工被指徒手将地上饭菜捡回餐盘,门店回应

现代快报
2026-07-02 15:08:15
中国男篮对阵日本时间敲定!央视全程直播,三点调整或将锁定胜局

中国男篮对阵日本时间敲定!央视全程直播,三点调整或将锁定胜局

小潌拍客在北漂
2026-07-03 04:13:46
穿越者再现?1977年猫王最后一场演出,观众手里竟有“手机”

穿越者再现?1977年猫王最后一场演出,观众手里竟有“手机”

Science科学说
2026-06-25 08:05:03
Shams:勒布朗·詹姆斯目前并不急于做出决定,也没有设定时间表

Shams:勒布朗·詹姆斯目前并不急于做出决定,也没有设定时间表

好火子
2026-07-02 23:40:54
官方:国安翻译因做出侮辱性手势染红,被追加停赛2场+罚款2万元

官方:国安翻译因做出侮辱性手势染红,被追加停赛2场+罚款2万元

懂球帝
2026-07-02 22:13:29
妻子在洗澡时,好兄弟给她发来消息:他走了吗?我回复:赶紧来吧

妻子在洗澡时,好兄弟给她发来消息:他走了吗?我回复:赶紧来吧

千秋文化
2026-07-02 19:55:15
上海孝顺女儿自费加装"电梯"给全楼用,却遭抵制

上海孝顺女儿自费加装"电梯"给全楼用,却遭抵制

看看新闻Knews
2026-07-02 23:05:40
阿斯谈阿根廷vs佛得角:梅西将对阵一支此前从未有人听说过的球队

阿斯谈阿根廷vs佛得角:梅西将对阵一支此前从未有人听说过的球队

画夕
2026-07-03 00:20:02
2026-07-03 06:07:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1313文章数 69关注度
往期回顾 全部

科技要闻

马斯克不承认,但SpaceX就该造AI手机

头条要闻

西班牙3-0奥地利进16强 奥亚萨瓦尔双响波罗头槌

头条要闻

西班牙3-0奥地利进16强 奥亚萨瓦尔双响波罗头槌

体育要闻

韩国人,为什么恨透了洪明甫?

娱乐要闻

众星祝福祖国,曾沛慈原形毕露?

财经要闻

千亿茶市场无赢家:澜沧巨亏 八马停"蹄"

汽车要闻

有纯电有增程 还有二代VLA支持 小鹏MONA L03预售价14.38万起

态度原创

家居
旅游
房产
公开课
军事航空

家居要闻

传奇筑 日常诗

旅游要闻

山间砂岩刻下盟约,曾经驿道地标胜景,如今只剩夯土空台一座!

房产要闻

稀缺预警!海岸线200米+限墅令下,海南「绝版硬通货」来了!

公开课

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

军事要闻

美军“航母杀手”首次公开 此前从未展示

无障碍浏览 进入关怀版