程序员面试金典——5.7找出缺失的整数
程序员面试金典——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找出缺失的整数相关推荐
- 程序员面试金典——11.5找出字符串
程序员面试金典--11.5找出字符串 Solution1:我的答案.加强版的二分查找,嘿嘿嘿 class Finder { public:int findString(vector<string ...
- 程序员面试金典--第k个数
程序员面试金典--第k个数 题目描述 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测试样例: 3 返回:7 逐个 ...
- 《程序员面试金典》+《算法导论》
<程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...
- 程序员面试金典——18.10字符串变换
程序员面试金典--18.10字符串变换 Solution1: 我的答案.穷举法,个人认为此题还是有点难度的... 利用了倒推法以及很高的时间复杂度才解决,并不值得推崇呀. class Change { ...
- 【To Do!】程序员面试金典——11.8维护x的秩
程序员面试金典--11.8维护x的秩 Solution1:我的答案.垃圾算法... class Rank { public:vector<int> getRankOfNumber(vect ...
- 【动态规划】程序员面试金典——11.7叠罗汉I
程序员面试金典--11.7叠罗汉I 首先我来批判一下这个题目出的真是不咋滴,后来的人按理说应该在上面.但此题的意思是求最长递增子序列,即后来的人在下面,完全是为了出题而出题... 参考博客: [1]h ...
- 程序员面试金典——1.1确定字符互异
程序员面试金典--1.1确定字符互异 2018年4月7日从今天开始正式看<程序员面试金典> Solution1: 之前一直以为的这类题比较好的一种方法,但貌似还是不太符合题目要求的&quo ...
- 程序员面试金典 - 面试题 10.03. 搜索旋转数组
题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 搜索旋转数组.给定一个排序后的数组 ...
- 《程序员面试金典(第6版)》面试题 16.13. 平分正方形(直线的斜截式方程,C++)
题目描述 给定两个正方形及一个二维平面.请找出将这两个正方形分割成两半的一条直线.假设正方形顶边和底边与 x 轴平行. 每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] = [ ...
最新文章
- 模型数据的保存和读取
- 不用鼠标,只用键盘,你还能操作自如吗?
- Linux shell if [ -n ] 正确使用方法
- 了不起的华人女数学家们
- 漫画:8年估值千亿美金的字节跳动是如何修炼的
- AltiumDesigner06——常见晶振封装尺寸
- airplay协议开发第1部(搭建测试环境)
- 易语言单窗口单ip软件源码_游戏搬砖怎样换IP防封?有几种处理方法?
- Android应用去广告方法盘点
- 其实带宽≠速度 ADSL加速法完全功略
- 用python调查应用程序结构
- 计算机组成原理相关知识重要吗?
- 红米路由器ac2100怎样设置ipv6_红米(Redmi)路由器AC2100怎么设置
- M131. Palindrome Partitioning(拆分回文子串)
- 小学生长度、面积、时间、质量单位换算总结
- 关于lua中显示绝对时间和相对时间
- openlayers和百度API实现点击地图加载全景的功能
- dbcp2数据源配置详解
- CollapsingToolbarLayout的使用及折叠事件监听
- Hadoop2.x高可用架构
热门文章
- 当卷积层后跟batch normalization层时为什么不要偏置b
- 一个对于小数四舍五入的算法C语言版
- 数据结构上机实践第八周项目3-顺序串算法
- c++访问私有(private)成员变量的常用方法
- 主机连接wifi,如何设置虚拟机上网方式
- word拼写检查自定义词典下载_取消或开启Word拼写检查和语法(去掉红波浪线)...
- Telnet服务器的系统要求,Telnet 服务器概述
- python在线编辑器可视化_python软件——wxpython可视化编辑器 v4.1附使用教程
- mysql只update不做修改_105岁老人抽烟喝酒不运动,长寿秘诀:只做4件事,不做1件事...
- python社区版如何下载库_pycharm社区版在哪里下载