码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode Find Minimum in Rotated Sorted Array

时间:2015-03-06 12:39:44      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array.

对于Rotated Sorted Array系列,可以考虑用二分法

技术分享技术分享
对于这道题,如果mid在区间1中,则num[mid]>num[low],如果mid在区间二中,则num[mid]<num[low]
用二分法搜索,最终结为low在第一个递增数组的最后一个,即指向最大的一个元素,hi指向的是第二个递增数组的第一个元素,即终结条件为hi-lo=1
此时最小的元素为hi指向的元素
但是可能出现一种情况,即将第0个元素旋转,则整个数组为一个递增数组 此时应为数组的第一个元素
 1 package Find.Minimum.in.Rotated.Sorted.Array;
 2 
 3 /**
 4  * @author dell
 5  *运用二分查找法进行查找
 6  *查询效率为lgN
 7  */
 8 public class FindMinimuminRotatedSortedArray {
 9 public int findMin(int[] num) {
10       int lo=0;
11       int hi=num.length-1;
12       int mid=lo;
13       if(num.length==1) return num[0];
14       //可能出现将前面的第0个元素搬到后面,此时整个数组是递增有序的
15       //此时的情况是num[lo]<num[hi]
16     while(num[lo]>=num[hi]){
17         //当hi-lo=1时此时的hi为第二个递增数组的第一个元素,即为最小元素
18         if(hi-lo==1){
19             mid=hi;
20             break;
21         }
22        mid=(lo+hi)/2;
23        if(num[mid]<num[lo]) hi=mid;
24        else lo=mid;
25     }
26     return num[mid];
27     }
28 public static void main(String args[]){
29     FindMinimuminRotatedSortedArray service=new FindMinimuminRotatedSortedArray();
30     //int[] a={4,5,6,7,0,1,2};
31     int a[]={1,2};
32     int result=service.findMin(a);
33     System.out.println(result);
34 }
35 }

 

 

Leetcode Find Minimum in Rotated Sorted Array

标签:

原文地址:http://www.cnblogs.com/criseRabbit/p/4317655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!