程序员面试金典——5.7找出缺失的整数

参考网址:https://www.nowcoder.com/profile/8185333/codeBookDetail?submissionId=12599768
Solution1:复杂度O(N)O(N)O(N)
题目:
numbers是一个已经排好序的二维数组,存储的是0-n,但是缺少一个数,每一行存储的是每个数的
二进制,从二进制低位开始存储。
目标:求缺少的那个数
思路:整数值x的二进制表示最低位为1的时候,x为奇数;最低位为0时,x为偶数。
由于数组中的数是0~n剩余数按照从小到大进行排列的,因此在缺失数之前,数组行标与数是相等的,即行标i = x,此时行标i % 2的值与数组中numbers[i][0]是相等的,即i为奇数,numbers[i][0]为1;为偶数时,numbers[i][0]为0.
第一个 i % 2与numbers[i][0]不相等处即为缺失数。
要注意缺失数为n即最大值的情况。要单独return n;
代码如下所示:

class Finder {
public:int findMissing(vector<vector<int> > numbers, int n) {// write code herefor(int i = 0; i < n; i ++)if(i % 2 != numbers[i][0])return i;return n;}
};

Solution2:复杂度O(logN)O(logN)O(logN)
利用二分查找

// O(logN)
int method2(vector<vector<int> > &numbers, int n) {int low = 0, high = numbers.size()-1;while (low <= high) {int mid = low + (high - low) / 2;if (numbers[mid][0] == (mid&1))low = mid + 1;elsehigh = mid - 1}if (low == numbers.size()) return n;else return low;
}

程序员面试金典——5.7找出缺失的整数相关推荐

  1. 程序员面试金典——11.5找出字符串

    程序员面试金典--11.5找出字符串 Solution1:我的答案.加强版的二分查找,嘿嘿嘿 class Finder { public:int findString(vector<string ...

  2. 程序员面试金典--第k个数

    程序员面试金典--第k个数 题目描述 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测试样例: 3 返回:7 逐个 ...

  3. 《程序员面试金典》+《算法导论》

    <程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...

  4. 程序员面试金典——18.10字符串变换

    程序员面试金典--18.10字符串变换 Solution1: 我的答案.穷举法,个人认为此题还是有点难度的... 利用了倒推法以及很高的时间复杂度才解决,并不值得推崇呀. class Change { ...

  5. 【To Do!】程序员面试金典——11.8维护x的秩

    程序员面试金典--11.8维护x的秩 Solution1:我的答案.垃圾算法... class Rank { public:vector<int> getRankOfNumber(vect ...

  6. 【动态规划】程序员面试金典——11.7叠罗汉I

    程序员面试金典--11.7叠罗汉I 首先我来批判一下这个题目出的真是不咋滴,后来的人按理说应该在上面.但此题的意思是求最长递增子序列,即后来的人在下面,完全是为了出题而出题... 参考博客: [1]h ...

  7. 程序员面试金典——1.1确定字符互异

    程序员面试金典--1.1确定字符互异 2018年4月7日从今天开始正式看<程序员面试金典> Solution1: 之前一直以为的这类题比较好的一种方法,但貌似还是不太符合题目要求的&quo ...

  8. 程序员面试金典 - 面试题 10.03. 搜索旋转数组

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 搜索旋转数组.给定一个排序后的数组 ...

  9. 《程序员面试金典(第6版)》面试题 16.13. 平分正方形(直线的斜截式方程,C++)

    题目描述 给定两个正方形及一个二维平面.请找出将这两个正方形分割成两半的一条直线.假设正方形顶边和底边与 x 轴平行. 每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] = [ ...

最新文章

  1. 模型数据的保存和读取
  2. 不用鼠标,只用键盘,你还能操作自如吗?
  3. Linux shell if [ -n ] 正确使用方法
  4. 了不起的华人女数学家们
  5. 漫画:8年估值千亿美金的字节跳动是如何修炼的
  6. AltiumDesigner06——常见晶振封装尺寸
  7. airplay协议开发第1部(搭建测试环境)
  8. 易语言单窗口单ip软件源码_游戏搬砖怎样换IP防封?有几种处理方法?
  9. Android应用去广告方法盘点
  10. 其实带宽≠速度 ADSL加速法完全功略
  11. 用python调查应用程序结构
  12. 计算机组成原理相关知识重要吗?
  13. 红米路由器ac2100怎样设置ipv6_红米(Redmi)路由器AC2100怎么设置
  14. M131. Palindrome Partitioning(拆分回文子串)
  15. 小学生长度、面积、时间、质量单位换算总结
  16. 关于lua中显示绝对时间和相对时间
  17. openlayers和百度API实现点击地图加载全景的功能
  18. dbcp2数据源配置详解
  19. CollapsingToolbarLayout的使用及折叠事件监听
  20. Hadoop2.x高可用架构

热门文章

  1. 当卷积层后跟batch normalization层时为什么不要偏置b
  2. 一个对于小数四舍五入的算法C语言版
  3. 数据结构上机实践第八周项目3-顺序串算法
  4. c++访问私有(private)成员变量的常用方法
  5. 主机连接wifi,如何设置虚拟机上网方式
  6. word拼写检查自定义词典下载_取消或开启Word拼写检查和语法(去掉红波浪线)...
  7. Telnet服务器的系统要求,Telnet 服务器概述
  8. python在线编辑器可视化_python软件——wxpython可视化编辑器 v4.1附使用教程
  9. mysql只update不做修改_105岁老人抽烟喝酒不运动,长寿秘诀:只做4件事,不做1件事...
  10. python社区版如何下载库_pycharm社区版在哪里下载