剑指offer 面试题8
2015-06-26 14:45
393 查看
题目:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
解释一下:
就是比如输入数组{3,4,5,1,2},要求输出数字1.要求时间复杂度小于O(n)。
本题有一个陷阱,就是如何处理{1,1,1,1,1,0,1,1,1,1}这种序列。
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
解释一下:
就是比如输入数组{3,4,5,1,2},要求输出数字1.要求时间复杂度小于O(n)。
本题有一个陷阱,就是如何处理{1,1,1,1,1,0,1,1,1,1}这种序列。
#include<iostream> using namespace std; int MinInOrder(int* data,int index1,int index2) { int result = data[index1]; for (int i = index1 + 1; i <= index2; i++) { if (result > data[i]) result = data[i]; } return result; } int Min(int *data,int length) { if (NULL == data || length) exception("Invalid Value!"); int index1 = 0, index2 = length - 1; int indexMid = index1; while (data[index1]>=data[index2]) { if (index2 - index1 == 1) { indexMid = index2; break; } indexMid = (index1 + index2) / 2; if (data[index1] == data[index2] && data[index1] == data[indexMid]) return MinInOrder(data,index1,index2); if (data[indexMid] >= data[index1]) index1 = indexMid; else if (data[indexMid] <= data[index2]) index2 = indexMid; } return data[indexMid]; } int main() { int data[] = { 1, 1, 1, 1,0, 1 }; cout<<Min(data,6); return 0; }
相关文章推荐
- 今天面试的一点心得
- Java基础面试题
- 黑马程序员_0基础黑马路
- 黑马程序员——Xcode常用快捷键
- 黑马程序员--const
- Shell 脚本面试问题大全
- Shell 脚本面试问题大全
- Android面试题
- 黑马程序员——Java中的多线程
- 程序员编程生涯中会犯的7个错误
- 让程序员跳槽的非钱原因(转载)
- 应届生经典面试题:说说进程与线程的区别与联系
- 只缺一个程序员
- 软通动力华为项目组面试题_新(带答案)
- 黑马程序员——Java基础---多线程Thread,Component
- 程序员开发过程中基本注意点
- android面试
- 如何提升你的能力?给年轻程序员的几条建议
- iOS初级面试总结(一)
- 黑马程序员---------Map集合和一些集合工具类