1304. 和为零的 N 个不同整数
1304. 和为零的 N 个不同整数
题目
Given an integer n
, return any array containing n
unique integers such that they add up to 0
.
Example 1:
Input: n = 5
Output: [-7,-1,1,3,4]
Explanation: These arrays also are accepted [-5,-1,1,2,3] , [-3,-1,2,-2,4].
Example 2:
Input: n = 3
Output: [-1,0,1]
Example 3:
Input: n = 1
Output: [0]
Constraints:
1 <= n <= 1000
题目大意
给你一个整数 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
解题思路
正负配对:
- 每对正负数相加之和为
0
,例如[1, -1]
。 - 如果
n
是偶数,只需构造n/2
对正负数即可。 - 如果
n
是奇数,可以在上述基础上添加一个0
。
- 每对正负数相加之和为
构造数组:
- 初始化结果数组
res
。 - 遍历从
1
到n/2
的整数:- 将正数
i
和负数-i
分别添加到结果数组中。
- 将正数
- 如果
n
是奇数,在最后加上0
。
- 初始化结果数组
返回构造好的数组。
复杂度分析
- 时间复杂度:
O(n)
,需要遍历n/2
次以生成数组。 - 空间复杂度:
O(n)
,用于存储结果数组。
代码
/**
* @param {number} n
* @return {number[]}
*/
var sumZero = function (n) {
let res = [];
for (let i = 1; i <= Math.floor(n / 2); i++) {
res.push(i);
res.push(-i);
}
if (n % 2 === 1) {
res.push(0);
}
return res;
};