旋转数组的最小元素
2017-04-11 10:24
162 查看
比如数组[3,4,5,1,2就是已排序数组[1,2,3,4,5]的一个旋转数组。找出最小元素使用二分法,复杂度最小,为O(logn)。
旋转数组有以下三种情况
(1)最小值在首部,如[1,2,3,4,5]
(2)最小值不在首部,如[3,4,5,1,2]
(3)无法二分查找的特例,如[1,1,0,1,1,1,1,1],该数组使用二分法无法确定最小值在分界线的左侧还是右侧。此时只能使用遍历数组来查找
代码:
/** * Created by wuchao on 17-4-11. */ import java.util.*; public class test { public static int array[] = {1,1,0,1,1,1,1}; public static void main(String[] args) { findMin(array); System.out.println(findMin(array)); } public static int findMin(int[] array){ int index1=0; int index2=array.length-1; int indexMin = 0; //情况1,如果第一个元素大于等于最后一个元素,说明最小值不处在数组首部 while(array[index1]>=array[index2]){ if(index2-index1==1){ return array[index2]; } int index = (index1+index2)/2; //情况3,如果array[index1],array[index].array[index2]相等,此时二分法不起效 if(array[index1]==array[index] && array[index2]==array[index]){ int min = array[index1]; for(int i=index1;i<=index2;i++){ if(min>array[i]) min=array[i]; } return min; } if(array[index]>=array[index1]){ index1=index; }else if(array[index]<=array[index2]){ index2=index; } return array[index2]; } //情况2,反之,最小值处在首部,直接返回首部元素 return array[index1]; } }
相关文章推荐
- 旋转数组的最小元素
- 旋转数组的最小元素
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。
- 42.旋转数组的最小元素[Get min value of rotated array]
- 旋转数组中的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 旋转数组的最小元素
- 程序员面试之 二分搜索 旋转数组的最小元素
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- 旋转数组中的最小元素
- 微软等数据结构+算法面试100题(40)-- 旋转数组中的最小元素
- 旋转数组的最小元素
- 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素
- 求旋转数组的最小元素
- 旋转数组的最小元素
- 面试训练旋转数组的最小元素
- 旋转数组的最小元素
- 第六十九题(旋转数组中的最小元素)
- 查找旋转数组中的最小值元素(剑指offer8)
- 程序员面试题精选100题(42)-旋转数组的最小元素