`
yangyingda2008
  • 浏览: 15954 次
社区版块
存档分类
最新评论

数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字, 空间复杂度O(1)。

阅读更多
数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字, 空间复杂度O(1)。
这个题其实考察的是我们怎样用最少的辅助空间求出数组中缺少的两个数。其实可以通过数学思想解决这两个问题。
首先缺少的两个数假设是a和b,那如果我们能计算出a+b和a-b,自然就能计算出a和b的值,也就是数组中缺少的值。
那怎么得到a+b呢?我们一只N个中的N-2个那用N个和减去N-2个已知的数就可以了。
那怎么计算两个数的差值即a-b呢??
直接计算没思路,其实我们可以按照上面的思路,先计算出1……N的平方和,然后减去已知的N-2个数的平放,就得到了a*a+b*b了。
然后就可以得到a-b的平方再开放就ok了。

两个公式如下:
等差数列求和:sum=N(N+1)/2
连续自然数的平方和公式:N(N+1)(2N+1)/6

看看具体实现代码吧O(∩_∩)O哈哈~
private static void find()
    {
        int[] A = new int[] { 1, 3, 4, 8, 7, 5, 6,  10, 11, 12 };
        int n = A.length + 2;
        int sum = (n * (n + 1)) >> 1;
        int squareSum = sum * (2 * n + 1) / 3;

        for (int i = 0; i < A.length; i++)
        {
            sum -= A[i];
            squareSum -= A[i] * A[i];
        }
        
        int ASubB=(int) Math.sqrt(-(sum*sum)+2*squareSum);
        
                
        System.out.println(((sum + ASumB) >> 1)+ " and "+ ((sum - ASumB) >> 1));
    }

上述代码由Java语言实现
camel骆驼男士凉鞋 真皮潮流魔术贴沙滩鞋男鞋 夏季新款正品凉鞋 只要56元!

http://redirect.simba.taobao.com/rd?w=unionnojs&f=http%3A%2F%2Fai.taobao.com%2Fauction%2Fedetail.htm%3Fe%3DYNbrUj%252FZdJwjmraEDZVrLkKA%252ByOYgzU6TbuPAry6zvGLltG5xFicOdXrTUTgh9sMDPIwxrc30rhF03SVjj78hGqYCHH8uv2oZb7Xhy%252F%252BGHmWC8e6JwspUeIZWR1bMnHu%26unid%3D96391090%26ptype%3D100010%26from%3Dbasic&k=5ccfdb950740ca16&c=un&b=alimm_0&p=mm_96391090_7268811_24064425


http://redirect.simba.taobao.com/rd?w=unionnojs&f=http%3A%2F%2Fai.taobao.com%2Fauction%2Fedetail.htm%3Fe%3DsmP1GufbVc4jmraEDZVrLqyWM2UFoMuM7AU7Qokl6rSLltG5xFicOdXrTUTgh9sMDPIwxrc30rhF03SVjj78hGqYCHH8uv2oZb7Xhy%252F%252BGHmWC8e6JwspUeIZWR1bMnHu%26unid%3D96391090%26ptype%3D100010%26from%3Dbasic&k=5ccfdb950740ca16&c=un&b=alimm_0&p=mm_96391090_7268811_24064425
  • 大小: 49.6 KB
分享到:
评论

相关推荐

    LeetCode解题总结

    1.1 从有序数组中删除重复元素 1.2 在排序数组被旋转后进行查找 1.3 寻找两个排序数组的中位数 1.4 最长连续序列 1.5 累加和 1.6 移除数组中指定值 1.7 下一个排列 1.8 第n个全排列 1.9 验证数独的正确性 1.10 容纳...

    《你必须知道的495个C语言问题》

    然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素,namelen记录了元素个数。它是怎样工作的?这样是合法的和可移植的吗? 23  2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确...

    2021-2022计算机二级等级考试试题及答案No.12312.docx

    - **知识点**:二分查找是在有序数组中搜索元素的有效算法。 - **解析**:对于长度为n的有序线性表,二分查找最坏情况下的时间复杂度为O(log n)。因此,正确答案为**C. O(log n)**。 #### 11. 图片框的Move方法 - *...

    java基础及面向对象试题.pdf

    可以使用`Random`类生成随机整数,创建一个长度为5的数组,然后将生成的随机数存储到数组中,并打印数组的所有元素。 9. 类的定义: 类是对象的蓝图,定义了对象的数据结构(成员变量)和操作(方法)。类是抽象...

    C语言培训预赛训练题一(ITAT)

    - 解析:D选项的逻辑与其他选项不同,当a为0时打印x,否则打印y,与题目要求的逻辑不符。 - **知识点:** - 条件分支:if语句可以根据条件选择不同的代码路径执行。 - 逻辑等价性:多个不同的表达式可能具有相同...

    2012年3月份二级C语言上机题库参考答案(最新的).pdf

    错误1的修正应该是`void fun(Node* a)`,错误2是打印字符的修正。编程部分计算两个字符串的最长公共前缀。 7. 第七题是链表操作,删除重复节点。`q`是临时指针,`next`是节点指针。错误1是缺少分号,错误2是节点...

    二级C100题-- 改错篇

    - **背景介绍**:此题要求从一个字符串中提取所有的数字字符,并将其组合成一个新的字符串。这是字符串处理和字符分类的基础练习。 - **关键概念**: - **字符串处理**:包括字符串遍历、修改等基本操作。 - **...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    VC考试复习题

    正确调用应该是`f(py, n)`,其中`py`指向数组`y`的首元素,`n`是引用传递的变量。正确答案是B。 6. 在C++中,前导零表示八进制数,但数字8不是八进制数的有效数字,因此080是非法数(D)。 7. C++语言中,函数的...

    2021-2022计算机二级等级考试试题及答案No.3829.docx

    7. **强连通图**:n个顶点的强连通图的边数至少有n(C),每个顶点至少有一条进入和一条离开的边。 8. **自定义主页**:用户可以将任何网页设置为自己的主页(正确),这是浏览器的基本功能之一。 9. **J2EE Model...

    2021-2022计算机二级等级考试试题及答案No.15020.docx

    对于二维数组 a[m][n],数组 a[j][i] 前面的元素个数可以通过 `i*m+j` 来计算。因此,正确答案是 **B**。 ### 16. if 语句的执行逻辑 **知识点**:Java 中 if 语句的执行逻辑。 **详细解释**:题目中的 if 语句...

Global site tag (gtag.js) - Google Analytics