2026-06-06统计主导元素下标数。用go语言给定一个整数数组 nums长度为 n。我们称某个位置 i通常只考虑 i n-1上的元素为“主导元素”如果它严格大于数组中从 i1 到 n-1 这一段所有元素的平均值。你的目标是统计数组中满足上述条件的位置数量并输出该数量最右端下标 n-1 对应的元素不参与判断。1 nums.length 100。1 nums[i] 100​​​​​​​。输入 nums [5,4,3]。输出 2。解释在下标 i 0 处值 5 是主导元素因为 5 average(4, 3) 3.5。在下标 i 1 处值 4 是主导元素相对于子数组 [3]。下标 i 2 不是主导元素因为它右侧没有元素。因此答案是 2。题目来自力扣3833。1. 代码逻辑逐步执行初始n 3ans 0sufSum 0用来累加后缀和即i1到末尾的和循环i n-2 1向下到0第一轮 i 1先做sufSum nums[i1]sufSum 0 nums[2] 0 3 3后缀长度len n-1-i 3-1-1 1检查nums[1] * len sufSum4 * 1 44 3成立 →ans→ans 1第二轮 i 0先做sufSum nums[i1]sufSum 3 nums[1] 3 4 7后缀长度len n-1-i 3-1-0 2检查nums[0] * len sufSum5 * 2 1010 7成立 →ans→ans 2循环结束返回ans 2。2. 算法核心要点从右往左遍历用一个变量sufSum累加当前 i 右边的所有元素和。每次循环开头先加上nums[i1]对 i 来说就是它右侧紧邻的元素但sufSum实际是 i 右边全部的和。这样只需要O(1)的额外变量不用每次重新计算后缀和。比较时用乘法避免浮点数运算。3. 时间复杂度循环n-1次从n-2到0每次循环 O(1) 操作。总时间复杂度O(n)。4. 空间复杂度除了输入数组只用了n,ans,sufSum几个变量。总额外空间复杂度O(1)。Go完整代码如下packagemainimport(fmt)funcdominantIndices(nums[]int)(ansint){n:len(nums)sufSum:0fori:n-2;i0;i--{sufSumnums[i1]ifnums[i]*(n-1-i)sufSum{ans}}return}funcmain(){nums:[]int{5,4,3}result:dominantIndices(nums)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defdominant_indices(nums):nlen(nums)ans0suf_sum0foriinrange(n-2,-1,-1):suf_sumnums[i1]ifnums[i]*(n-1-i)suf_sum:ans1returnansif__name____main__:nums[5,4,3]resultdominant_indices(nums)print(result)C完整代码如下#includeiostream#includevectorusingnamespacestd;intdominantIndices(vectorintnums){intnnums.size();intans0;intsufSum0;for(intin-2;i0;i--){sufSumnums[i1];if(nums[i]*(n-1-i)sufSum){ans;}}returnans;}intmain(){vectorintnums{5,4,3};intresultdominantIndices(nums);coutresultendl;return0;}