搜索
您的当前位置:首页正文

leetcode---数组系列---面试题 17.19. 消失的两个数字(消失的一个数字->消失的两个数字)C++

来源:爱go旅游网

leetcode—数组系列—面试题 17.19. 消失的两个数字(消失的一个数字->消失的两个数字)

首先得到消失的第一个数字再根据这个数字分成两个数字。
题目描述:
给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?

以任意顺序返回这两个数字均可。

示例 1:

示例 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};
    }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top