剑指offer---旋转数组中最小的数字(8)
2017-12-05 10:57
337 查看
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的逆转。输入一个递增排序的数组的一个逆转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为数组{1,2,3,4,5}的一个旋转,该数组的最小值为1。
#include <iostream> using namespace std; int MinInorder(int* arr,int index1,int index2) { int tmp = arr[index1]; for(int i=index1+1;i<index2;i++) { if(arr[i] < tmp) { tmp = arr[i]; } } return tmp; } int Min(int*arr,int len) { if(arr == NULL || len<=0) throw new exception("Invalid parameters"); int index1 = 0; int index2 = len-1; int midIndex = index1; while(arr[index1] >= arr[index2]) { //如果index1和index2相邻 if(index2-index1 == 1) { midIndex = index2; break; } midIndex = (index1+index2)/2; //如果index1==index2==midindex if(arr[index1]==arr[index2] && arr[midIndex] == arr[index1]) { return MinInorder(arr,index1,index2); } if(arr[midIndex] >= arr[index1]) { index1 = midIndex; } else if(arr[midIndex] <= arr[index2] ) { index2 = midIndex; } } return arr[midIndex]; } int main() { int arr[]={3,4,5,1,2}; int arr1[]= {1,0,1,1,1}; int flg = Min(arr1,sizeof(arr)/sizeof(arr[0])); cout<<flg<<endl; return 0; }
相关文章推荐
- 剑指offer--旋转数组的最小数字
- 剑指offer:旋转数组的最小数字 代码实现
- 剑指offer---旋转数组的最小数字
- 剑指offer 8 - 旋转数组的最小数字
- 【剑指offer——JAVA实现】旋转数组的最小数字(含思路解答示意图)
- 剑指offer——旋转数组的最小数字(二分法思路)
- [牛客网,剑指offer,python] 旋转数组的最小数字
- (C++)剑指offer-6:旋转数组的最小数字
- 【剑指offer】面试题 11:旋转数组的最小数字
- [九度OnlineJudge][剑指Offer]题目1386:旋转数组的最小数字
- 剑指offer-算法题练习:part6 旋转数组的最小数字
- 剑指offer-面试题8-旋转数组的最小数字
- 剑指offer-6.旋转数组的最小数字
- 剑指Offer_08 旋转数组的最小数字
- 剑指Offer--6.旋转数组的最小数字
- 剑指offer-----旋转数组的最小数字
- 【剑指offer】旋转数组的最小数字&&二分查找
- [牛客网,剑指offer,python] 旋转数组的最小数字
- 剑指offer 8题 【查找和排序 】旋转数组的最小数字
- 剑指offer面试题 旋转数组的最小数字