https://leetcode.cn/problems/missing-two-lcci/ 给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O (N) 时间内只用 O (1) 的空间找到它们吗? 以任意顺序返回这两个数字均可。 示例 1:

输入: [1]
输出: [2,3]

示例 2:

输入: [2,3]
输出: [1,4]

提示:

  • nums.length <= 30000

# 题解

class Solution {
public:
vector missingTwo(vector<int>& nums) {
long n = nums.size() + 2;
int a = -accumulate(nums.cbegin(), nums.cend(), -(1 + n) * n / 2);
int b = -inner_product(nums.cbegin(), nums.cend(), nums.cbegin(), -(1 + n) * n / 2 * (2 * n + 1) / 3);
int tmp = sqrt(2 * b - a * a);
return { (a + tmp) / 2, (a - tmp) / 2 };
}
};

复杂度分析:

  • 时间复杂度 \(O (n)\)
  • 空间复杂度 \(O (1)\)