leetcode—数组系列—面试题 17.19. 消失的两个数字(消失的一个数字->消失的两个数字)
首先得到消失的第一个数字再根据这个数字分成两个数字。
题目描述:
给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?
以任意顺序返回这两个数字均可。
示例 1:
输入: [1]
输出: [2,3]
示例 2:
输入: [2,3]
输出: [1,4]
对于示例1,我们首先得到[1,nums.size()+2]区间的总和,然后减去nums的总和。这样我们得到缺失的两个值的和,diff。一个值>=diff/2,一个值<=diff/2。那么计算nums中<=diff/2的值之和,同[1,diff/2]区间的总和相减得到第一个缺失的值。
c++代码如下:
vector<int> missingTwo(vector<int>& nums)
{
int sert1, sert2,sumsize = nums.size()+2, num = 0;
for(auto &c1:nums) num += c1;
int diff = (sumsize+1)*sumsize/2 - num, sub1 = diff/2;
num = 0;
for(auto &c2:nums) if(c2<=sub1) {num+=c2;}
sert1 = (1+sub1)*sub1/2 - num;
sert2 = diff-sert1;
return {sert1, sert2};
}
本文介绍了一种在O(N)时间内仅使用O(1)额外空间解决LeetCode面试题17.19的方法,即寻找数组中缺失的两个数字。通过对数组元素求和及区间划分的技巧,给出了具体的实现思路与C++代码示例。
493

被折叠的 条评论
为什么被折叠?



