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

Search in Rotated Sorted Array

时间:2015-02-01 16:02:15      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

本题的思路是二分查找,关键是怎么用二分查找。通过middle值和数组尾部的值比较,可以确定start-Middle和middle-end,这两部分那一部分是有序的,有序的数组是可以用二分查找的。

class Solution {
public:
    int search(int A[], int n, int target) {

        if(n == 0)
		return 0;
        int middle,end,start;
        start = 0;
		end = n-1;
		middle = (start + end)/2;
		int result;
		while(start <= end)
		{
		   
           if(A[middle] < A[end])
           {
               result = findbinarysearch(A,middle,end,target);
			   if(result !=-1)
			   	return result;
			   end = middle -1;
			   middle = (start+ end)/2;
		   }
           else if(A[middle] > A[end])
           {
               result = findbinarysearch(A,start,middle,target);
			   if(result !=-1)
			   	return result;
			   start  = middle +1 ;
			   middle = (start+ end)/2;

		   }
		   else
		   {
		     if(A[middle] == target)
              return middle;
			 else
			   return -1;
		   }

		}
		return -1;
        
    }
	int findbinarysearch(int A[],int start, int end, int target)
	{
      int middle = (start + end)/2;
	  
	  while(start <= end)
	  {
         if(A[middle] < target)
         {
            start = middle +1;
		    middle = (start + end)/2;
		 }
		 else if(A[middle] > target)
		 {
            end    = middle -1;
		    middle = (start + end)/2;
		 }
		 else
		 {
             return middle;
		 }
		 	

	  }


      return -1;
	}
};

  

Search in Rotated Sorted Array

标签:

原文地址:http://www.cnblogs.com/xgcode/p/4265550.html

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