1304-和为零的 N 个不同整数

Raphael Liu Lv10

给你一个整数 n,请你返回 **任意 **一个由 n 个 **各不相同 **的整数组成的数组,并且这 n 个数相加和为 0

示例 1:

**输入:** n = 5
**输出:** [-7,-1,1,3,4]
**解释:** 这些数组也是正确的 [-5,-1,1,2,3],[-3,-1,2,-2,4]。

示例 2:

**输入:** n = 3
**输出:** [-1,0,1]

示例 3:

**输入:** n = 1
**输出:** [0]

提示:

  • 1 <= n <= 1000

方法一:构造

我们首先将最小的 n - 1 个自然数 0, 1, 2, ..., n - 2 放入数组中,它们的和为 sum。对于剩下的 1 个数,我们可以令其为 -sum,此时这 n 个数的和为 0,并且:

  • n = 1 时,我们构造的答案中只有唯一的 1 个数 0

  • n > 1 时,我们构造的答案中包含 n - 1 个互不相同的自然数和 1 个负数;

因此这 n 个数互不相同,即我们得到了一个满足要求的数组。

[sol1-C++]
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
vector<int> sumZero(int n) {
vector<int> ans;
int sum = 0;
for (int i = 0; i < n - 1; ++i) {
ans.push_back(i);
sum += i;
}
ans.push_back(-sum);
return ans;
}
};
[sol1-Python3]
1
2
3
4
5
class Solution:
def sumZero(self, n: int) -> List[int]:
ans = [x for x in range(n - 1)]
ans.append(-sum(ans))
return ans

复杂度分析

  • 时间复杂度:O(N)。

  • 空间复杂度:O(1),除了存储答案的数组 ans 之外,额外的空间复杂度是 O(1)。

 Comments
On this page
1304-和为零的 N 个不同整数