【面试题】寻找旋转排序数组中的最小值
2015-07-11 21:42
309 查看
题目描述
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。http://www.lintcode.com/zh-cn/problem/find-minimum-in-rotated-sorted-array/解题思路
基本思想采用二分查找,不过首先要判断这个排序数组是否直接有序,如果是0 1 2 3 4 5 6 7这样的数组,最小值就是第一个值;接着就采用二分法来查找代码实现
[code]class Solution { public: /** * @param num: a rotated sorted array * @return: the minimum number in the array */ int findMin(vector<int> &num) { // write your code here int len = num.size(); int low = 0; int high = len - 1; if(num[low] < num[high]) return num[low]; while(high - low > 1) { int mid = (high + low) / 2; if(num[mid] > num[low]) { low = mid; } else { high = mid; } } return num[high]; } };
[code]class Solution { public: /** * @param num: a rotated sorted array * @return: the minimum number in the array */ int findMin(vector<int> &num) { // write your code here int len = num.size(); int low = 0; int high = len - 1; int min_index = low; while(num[low] >= num[high]) { if(high - low == 1) { min_index = high; break; } int mid = (high + low) / 2; if(num[low] < num[mid]) low = mid; else high = mid; } return num[min_index]; } };
相关文章推荐
- JAVA集合类(大公司面试喜欢问的)
- 【面试题】用栈实现队列
- 面试常考算法题 局部最小 求二叉树结点 求两个数组中所有数的上中位数 两个数组的所有数中第K小的数
- 老伴说我每个标点符号后都打一个空格, 我才意识到真有这个问题,其实就是个职业病吧
- 黑马程序员--java基础学习笔记6
- 黑马程序员 String StringBuffer
- 黑马程序员
- [异能程序员]第四章 偶遇(第四更)
- [异能程序员]第三章 异能初现(第三更)
- [异能程序员]第四章 偶遇(第四更)
- [异能程序员]第三章 异能初现(第三更)
- 黑马程序员-类的封装,继承和多态
- 如何锻炼出最牛程序员的编码套路
- 程序员必知的8大排序(一)-------插入排序,希尔排序(java实现)
- 黑马程序员——OC基础---block,protocol
- HashMap的面试题
- 面试——腾讯
- 黑马程序员——OC基础---内存管理(autorelease,ARC)
- 黑马程序员 多线程 2
- 程序员一路上相伴的朋友