跳至主要內容

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


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

🟢   🔖  数组 数学  🔗 力扣open in new window LeetCodeopen in new window

题目

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

解题思路

  1. 正负配对:

    • 每对正负数相加之和为 0,例如 [1, -1]
    • 如果 n 是偶数,只需构造 n/2 对正负数即可。
    • 如果 n 是奇数,可以在上述基础上添加一个 0
  2. 构造数组:

    • 初始化结果数组 res
    • 遍历从 1n/2 的整数:
      • 将正数 i 和负数 -i 分别添加到结果数组中。
    • 如果 n 是奇数,在最后加上 0
  3. 返回构造好的数组。

复杂度分析

  • 时间复杂度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;
};