🤖 AI总结
主题
使用Go语言统计数组中主导元素个数
摘要
文章讲解用Go语言解决力扣3833题,通过从右向左遍历和累加后缀和,统计数组中严格大于右侧所有元素平均值的主导元素个数。
关键信息
- 1 从右向左遍历,用sufSum累加右侧元素和
- 2 通过乘法比较避免浮点数运算
- 3 时间复杂度O(n),空间复杂度O(1)
2026-06-06:统计主导元素下标数。用go语言,给定一个整数数组 nums,长度为 n。我们称某个位置 i(通常只考虑 i < n-1)上的元素为“主导元素”,如果它严格大于数组中从 i+1 到 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 = 3
•ans = 0
•sufSum = 0(用来累加后缀和,即i+1到末尾的和)
循环i = n-2 = 1向下到0: 第一轮 i = 1:
• 先做sufSum += nums[i+1]
•sufSum = 0 + nums[2] = 0 + 3 = 3
• 后缀长度len = n-1-i = 3-1-1 = 1
• 检查nums[1] * len > sufSum?
•4 * 1 = 4,4 > 3成立 →ans++→ans = 1
第二轮 i = 0:
• 先做sufSum += nums[i+1]
•sufSum = 3 + nums[1] = 3 + 4 = 7
• 后缀长度len = n-1-i = 3-1-0 = 2
• 检查nums[0] * len > sufSum?
•5 * 2 = 10,10 > 7成立 →ans++→ans = 2
循环结束,返回ans = 2。
2. 算法核心要点
• 从右往左遍历,用一个变量sufSum累加当前 i 右边的所有元素和。
• 每次循环开头先加上nums[i+1](对 i 来说就是它右侧紧邻的元素,但sufSum实际是 i 右边全部的和)。
• 这样只需要O(1)的额外变量,不用每次重新计算后缀和。
• 比较时用乘法避免浮点数运算。
3. 时间复杂度
• 循环n-1次(从n-2到0),每次循环 O(1) 操作。
• 总时间复杂度O(n)。
4. 空间复杂度
• 除了输入数组,只用了n,ans,sufSum几个变量。
• 总额外空间复杂度O(1)。
Go完整代码如下:
package main
import (
"fmt"
)
func dominantIndices(nums []int) (ans int) {
n := len(nums)
sufSum := 0
for i := n - 2; i >= 0; i-- {
sufSum += nums[i+1]
if nums[i]*(n-1-i) > sufSum {
ans++
}
}
return
}func main() {
nums := []int{5, 4, 3}
result := dominantIndices(nums)
fmt.Println(result)
}
![]()
Python完整代码如下:
# -*-coding:utf-8-*-
def dominant_indices(nums):
n = len(nums)
ans = 0
suf_sum = 0
for i in range(n - 2, -1, -1):
suf_sum += nums[i + 1]
if nums[i] * (n - 1 - i) > suf_sum:
ans += 1
return ansif __name__ == "__main__":
nums = [5, 4, 3]
result = dominant_indices(nums)
print(result)
![]()
C++完整代码如下:
using namespace std;
int dominantIndices(vector& nums) {
int n = nums.size();
int ans = 0;
int sufSum = 0;
for (int i = n - 2; i >= 0; i--) {
sufSum += nums[i + 1];
if (nums[i] * (n - 1 - i) > sufSum) {
ans++;
}
}
return ans;
}
int main() {
vector nums = {5, 4, 3};
int result = dominantIndices(nums);
cout << result << endl;return0;
}
![]()
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。