《剑指Offer》面试题八之旋转数组的最小数字
2017-03-14 23:58
615 查看
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。算法描述
/** * @param array 传入的旋转数组 * @param size 传入的数组的大小 * */ public static void FindMinRotateArray(int[] array,int size){ if(array==null||size<=0){ System.out.println("输入有误"); return; } int start=0; int end=size-1; int middle=start; while(array[start]>=array[end]){ if(end-start==1){ middle=end; System.out.println(array[end]); return; } middle=(start+end)/2; //如果 start middle end 三个下标对应的数字相等 //则只能顺序查找 if(array[start]==array[middle]&&array[middle]==array[end]){ int minNum=array[start]; for(int i=start+1;i<=end;i++){ if(array[i]<minNum){ minNum=array[i]; } } System.out.println(minNum); return; } if(array[middle]>=array[start]){ start=middle; }else if(array[middle]<=array[end]){ end=middle; } } System.out.println(array[middle]); }
要记得注意这几种情况:
1 1 1 1 0
1 0 1 1 1
1 1 1 0 1
等等。
还有如果想AC oj上面的算法题,用Java的话会超时。注意把算法改成C++语言描述。
OJ地址:http://ac.jobdu.com/problem.php?pid=1386
相关文章推荐
- 《剑指Offer》面试题8:旋转数组的最小数字
- 剑指Offer面试题:7.旋转数组的最小数字
- 剑指offer面试题八:旋转数组的最小数字
- 《剑指offer》面试题8 旋转数组的最小数字
- 剑指Offer:面试题8 :旋转数组的最小数字
- 剑指Offer面试题8(java版):旋转数组的最小数字
- (未完成)《剑指offer》(面试题8):旋转数组的最小数字
- 《剑指offer》面试题11:旋转数组的最小数字
- 剑指offer 面试题8:旋转数组的最小数字 题解
- 剑指Offer(第二版)面试题11:旋转数组的最小数字
- 剑指Offer面试题11:旋转数组的最小数字
- 《剑指Offer》之面试题旋转数组的最小数字
- 《剑指Offer》学习笔记--面试题8:旋转数组的最小数字
- 面试题08_旋转数组的最小数字——剑指offer系列
- 剑指Offer之面试题8:旋转数组中的最小数字
- 《剑指Offer》面试题:旋转数组的最小数字
- 剑指Offer系列-面试题8:旋转数组的最小数字
- 《剑指offer》面试题8—旋转数组的最小数字
- 剑指offer-面试题8.旋转数组的最小数字
- 剑指offer之面试题8旋转数组的最小数字