1. 题目

给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。

你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?

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

示例 1:
输入: [1]
输出: [2,3]示例 2:
输入: [2,3]
输出: [1,4]提示:
nums.length <= 30000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/missing-two-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 数学公式

12+22+32+42+....+n2=n∗(n+1)∗(2n+1)/61^2+2^2+3^2+4^2+....+n^2 = n*(n+1)*(2n+1)/612+22+32+42+....+n2=n∗(n+1)∗(2n+1)/6
1+2+...+n=n∗(1+n)/21+2+...+n = n*(1+n)/21+2+...+n=n∗(1+n)/2

class Solution {public:vector<int> missingTwo(vector<int>& nums) {int n = nums.size()+2, a, b;long sum = 0, squareSum = 0;for(int i = 0; i < nums.size(); ++i){sum += nums[i];squareSum += nums[i]*nums[i];}squareSum = long(n)*(n+1)*(2*n+1)/6 - squareSum;sum = n*(n+1)/2 - sum;for(a = 1; a <= n; ++a){if(2*a*(sum-a) == sum*sum - squareSum)break;}b = sum-a;return {a,b};}
};

72 ms 22.5 MB

2.2 常规解法

class Solution {public:vector<int> missingTwo(vector<int>& nums) {sort(nums.begin(), nums.end());vector<int> ans;int i, j;for(i = 1, j = 0; i <= nums.size()+2 && j < nums.size(); ++i){if(nums[j] != i)ans.push_back(i);elsej++;if(ans.size()==2)return ans;}if(ans.size()==1)ans.push_back(i);else if(ans.size()==0){ans.push_back(i);ans.push_back(i+1);}return ans;}
};

116 ms 22.4 MB

2.3 位运算

  • 0 异或所有数,以及1-n的所有数,只出现1次的两个数的异或值得到了
  • 把上面异或值不为0的二进制位找到
  • 用这个位把 1到n 和数组里的数(2n-2 个),按照上面找出的二进制位,分成2组
  • 即得到出现1次的两个数
class Solution {public:vector<int> missingTwo(vector<int>& nums) {int XOR = 0, a = 0, b = 0, i;for(auto& n : nums) XOR ^= n;for(i = 1; i <= nums.size()+2; ++i) XOR ^= i;for(i = 0; i < 32; ++i)if(XOR&(1<<i))//a、b二进制不同的位break;// i为 a,b 不相同的二进制位for(auto& n : nums){if((n>>i)&1)//分组a ^= n;elseb ^= n;}for(int j = 1; j <= nums.size()+2; ++j){if((j>>i)&1)a ^= j;elseb ^= j;}return {a,b};}
};

80 ms 22.3 MB

程序员面试金典 - 面试题 17.19. 消失的两个数字(数学/位运算)相关推荐

  1. 程序员面试金典 - 面试题 17.04. 消失的数字(数学/位运算)

    1. 题目 数组 nums 包含从0到n的所有整数,但其中缺了一个. 请编写代码找出那个缺失的整数.你有办法在O(n)时间内完成吗? 注意:本题相对书上原题稍作改动 示例 1: 输入:[3,0,1] ...

  2. 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一 ...

  3. 程序员面试金典 - 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...

  4. 程序员面试金典 - 面试题 17.22. 单词转换(BFS)

    1. 题目 给定字典中的两个词,长度相等. 写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符. 每一步得到的新词都必须能在字典中找到. 编写一个程序,返回一个可能的转换序列.如有多个可能 ...

  5. 程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)

    1. 题目 编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数. 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 ...

  6. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

  7. 程序员面试金典 - 面试题 17.15. 最长单词(排序+递归)

    1. 题目 给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成. 若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串. ...

  8. 程序员面试金典 - 面试题 17.07. 婴儿名字(并查集)

    1. 题目 每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量. 有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来. 给定两个 ...

  9. [Leetcode][程序员面试金典][面试题17.13][JAVA][恢复空格][动态规划][Trie][字符串哈希]

    [问题描述][中等] [解答思路] 1. 动态规划 动态规划流程 第 1 步:设计状态 dp[i] 表示字符串的前 i 个字符的最少未匹配数. 第 2 步:状态转移方程 假设当前我们已经考虑完了前 i ...

最新文章

  1. 前端一HTML:二十二元素显示方式案例
  2. mysql命令巧记_MYSQL常用命令大全(三)【值得收藏】
  3. Mysql剖析单条查询三种方法
  4. 设计模式之依赖倒转原则
  5. NSObject协议中方法:description 和 debugDescription
  6. MySQL入门之备份与恢复
  7. CTS 2019 Pearl
  8. linux运维中的中间件,linux中间件Nginx的安装过程
  9. mysql连接报java.math.BigInteger cannot be cast to java.lang.Long异常
  10. cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析...
  11. STORM的DRPC通讯
  12. crc可以检出奇数个错误_计算机网络学习笔记 3.3 差错控制
  13. python如何使用ppip安装xlwt_如何安装python xlwt
  14. linux教程 课件ppt,Linux操作系统实用教程全集 教学课件 中文PPT版
  15. 2022-10-03笔记(内网横向)
  16. 回归技术——我看中国软件的发展方向
  17. 计算机or笔记本,笔记本or台式机 这几款戴尔主机性能上没得挑
  18. 微信小程序--分享并设置分享链接的有效时间
  19. 军队文职(数学2+物理)——高等数学 1、函数
  20. 【跨境电商】5个最佳WordPress插件推荐

热门文章

  1. halcon资料链接
  2. android防谷歌滑动效果,谷歌是如何做到这一点的?在Android应用程序中滑动ActionBar...
  3. Linux进程全解10——守护进程
  4. 神奇的css3(2)动画
  5. jquery中json数据转换为字典
  6. linux dd使用记录
  7. Adobe和苹果相互推诿 不支持Flash谁之过?
  8. skiplist原理与实现
  9. redis源码之main()函数剖析
  10. A star算法优化一