LeetCode:33. Search in Rotated Sorted Array

在类似有序序列7,8,9,0,1,2,3,4中查找一个给定的数,没有重复数字

1,顺序查找

2,二分查找

  类似序列的特点是由一个最大数分成了两个有序序列,例如例子中是9把原序列分成了7,8,9和0,1,2,3,4,而二分查找的特点是数列必须有序,而且中间值特别重要

这里用到了分类讨论,总共有两层分类,

  第一层分类是中间值是左侧大数列的,还是右侧小数列的

  第二层分类是所查数字是在左侧还是右侧

  这里主要是分类思想的应用,尤为重要,分类的标准是中间值是偏向大数列还是小数列,偏向这两个字尤为值得思考

  所写代码如下:

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int low,high;
        int media;
            
        low = 0;
        high = nums.size() - 1;
       
        
        while(low <= high){
            
            
            media = (high+low) / 2;

            if(nums[media] == target)
                return media;

            
           if(nums[media] < nums[high])
    			if(nums[media] < target && target <= nums[high])
    				low = media + 1;
    			else
    				high = media - 1;
	       else
    			if(nums[low] <= target && target < nums[media])
    				high = media - 1;
    			else 
    				low = media + 1;
            

        }
        
        return -1;
    }
};

 

3,多次二分查找

  链接博客地址:http://www.cnblogs.com/ganganloveu/p/4148554.html

posted @ 2016-03-23 14:57  shijiwomen  阅读(171)  评论(0编辑  收藏  举报