在有序递增数组中查找一个缺少的数字
来源:互联网 发布:六度空间理论算法 编辑:程序博客网 时间:2024/04/30 01:55
例如2,3,4,5,6,8,9.在这个数组中我们要找到缺少的7。从直觉上看,我们可以把2到9求和,然后把数组的成员求和。用数字的和减去数组的和得到的就是缺少的数字。但是这个办法的时间复杂度是O(n)。但是我们看到数组是有序的,能不能通过二分法找到数字呢,答案是肯定的。我们可以发现规律,如果数字缺少在数组的前半部分,那么数组的中间节点会大于数字的中间节点。例如1,3,4由于缺少2,所以数组的中间节点变成了3,但是数字的中间节点仍然是2。如果缺少的数字在后半部分,则数组中间节点等于数字的中间节点。通过这个规律,我们可以通过二分法找到缺少的数字的准确位置。
int FindMissedNumber(int* list, int start, int end){if(list[end - start - 1] < end){return end;}if(end - start == 1){if(list[0] == start){return end;}else{return start;}}if(list[(end - start )/ 2] > (end - start) / 2+ start){return FindMissedNumber(list, start, (end - start) / 2 + start);}else{return FindMissedNumber(list + (end -start)/ 2 + 1, (end-start ) /2 + 1 + start, end);}}
- 在有序递增数组中查找一个缺少的数字
- 在按顺序递增的数组中查找缺少的某一个数字
- 递增有序数组中,查找某一个数字的位置
- 折半查找------在一个升序的有序数组中查找某个具体的数字
- (二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
- 在有序数组中,找一个数字
- 在一个两段有序的数组中查找
- 在一个有序的旋转数组中,查找给定值
- 在一个旋转有序数组中,查找最小的数
- 输入一个递增排序的数组和一个数字sum,在数组中查找两个数,使得他们的和正好是sum
- 输一个递增排序的数组和一个数字 s,在数组中查找两个数使得它们的 和正好是 s
- 有一个二维数组杨氏矩阵,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字是否存在
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 有一个二维数组.----杨氏矩阵 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- //杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。
- (核心算法)查找某个数在有序数组中(递增,含重复)第一次出现的下标
- 给定一个单调递增有序数组A,给定一个数字N,试给出一个算法得到A中该数字N出现的次数。
- fgetcsv 中文丢失问题
- Ubuntu12.04下在Chrome里启用Java
- VC使用双缓存技术,解决闪屏问题
- ruby里面的线程和进程!
- java 缓存实例的不可变类 p186
- 在有序递增数组中查找一个缺少的数字
- 哈佛大学公开课《Positive Psychology 1504》学习笔记 - Relationship
- 推荐的C++书籍以及阅读顺序
- UVa 10098 Generating Fast
- 0705
- 触摸屏简介
- 学习cocos2d-x笔记-1
- EasyARM2200开发板学习笔记:初级C程序运行环境的建立
- java 抽象类