LeetCode 2778: Sum of Squares of Special Elements (Index Divisibility Check)
LeetCode 2778ArrayMathToday we solve LeetCode 2778 - Sum of Squares of Special Elements.
Source: https://leetcode.com/problems/sum-of-squares-of-special-elements/
English
Problem Summary
Given an integer array nums of length n, index i (1-indexed) is special if n % i == 0. Return the sum of squares of all special elements nums[i - 1].
Key Insight
Special positions are exactly the divisors of n in 1-indexing. So a single pass from i = 1..n with divisibility check is enough, and we accumulate nums[i-1] * nums[i-1] when valid.
Algorithm
- Let n = nums.length, initialize ans = 0.
- For each i from 1 to n: if n % i == 0, add nums[i-1]^2 to ans.
- Return ans.
Complexity Analysis
Time: O(n).
Space: O(1).
Common Pitfalls
- Mixing 0-index and 1-index rules.
- Checking i % n == 0 by mistake.
- Forgetting to square selected values.
Reference Implementations (Java / Go / C++ / Python / JavaScript)
class Solution {
public int sumOfSquares(int[] nums) {
int n = nums.length;
int ans = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
ans += nums[i - 1] * nums[i - 1];
}
}
return ans;
}
}func sumOfSquares(nums []int) int {
n := len(nums)
ans := 0
for i := 1; i <= n; i++ {
if n%i == 0 {
ans += nums[i-1] * nums[i-1]
}
}
return ans
}class Solution {
public:
int sumOfSquares(vector<int>& nums) {
int n = (int)nums.size();
int ans = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
ans += nums[i - 1] * nums[i - 1];
}
}
return ans;
}
};class Solution:
def sumOfSquares(self, nums: List[int]) -> int:
n = len(nums)
ans = 0
for i in range(1, n + 1):
if n % i == 0:
ans += nums[i - 1] * nums[i - 1]
return ansvar sumOfSquares = function(nums) {
const n = nums.length;
let ans = 0;
for (let i = 1; i <= n; i++) {
if (n % i === 0) {
ans += nums[i - 1] * nums[i - 1];
}
}
return ans;
};中文
题目概述
给你整数数组 nums,长度为 n。若 1 下标位置 i 满足 n % i == 0,则该位置是 special。要求返回所有 special 元素 nums[i-1] 的平方和。
核心思路
special 下标就是 n 的所有正因子(按 1 下标定义)。因此线性枚举 i=1..n,满足整除时累加 nums[i-1]^2 即可。
算法步骤
- 令 n = nums.length,初始化 ans = 0。
- 枚举 i 从 1 到 n。
- 若 n % i == 0,把 nums[i-1] * nums[i-1] 加入答案。
- 返回 ans。
复杂度分析
时间复杂度:O(n)。
空间复杂度:O(1)。
常见陷阱
- 把题目的 1 下标和代码的 0 下标搞混。
- 误写成判断 i % n == 0。
- 忘记“平方”这一步。
多语言参考实现(Java / Go / C++ / Python / JavaScript)
class Solution {
public int sumOfSquares(int[] nums) {
int n = nums.length;
int ans = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
ans += nums[i - 1] * nums[i - 1];
}
}
return ans;
}
}func sumOfSquares(nums []int) int {
n := len(nums)
ans := 0
for i := 1; i <= n; i++ {
if n%i == 0 {
ans += nums[i-1] * nums[i-1]
}
}
return ans
}class Solution {
public:
int sumOfSquares(vector<int>& nums) {
int n = (int)nums.size();
int ans = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
ans += nums[i - 1] * nums[i - 1];
}
}
return ans;
}
};class Solution:
def sumOfSquares(self, nums: List[int]) -> int:
n = len(nums)
ans = 0
for i in range(1, n + 1):
if n % i == 0:
ans += nums[i - 1] * nums[i - 1]
return ansvar sumOfSquares = function(nums) {
const n = nums.length;
let ans = 0;
for (let i = 1; i <= n; i++) {
if (n % i === 0) {
ans += nums[i - 1] * nums[i - 1];
}
}
return ans;
};
Comments