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

33 Search in Rotated Sorted Array

时间:2016-06-07 12:49:20      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

uppose 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).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

================

二分搜索

解决思路:

/**
012 3 4567
701 2 3456
670 1 2345
567 0 1234
456 7 0123
345 6 7012
234 5 6701
123 4 5670
*/

可以看到数组旋转的各种情况,mid将数组分为左右两部分

nums[mid]<nums[right],那么右边的部分是有序的

  因为右边部分有序,那么我可以在有序的部分判断:是否存在target值;如果有序的部分不存在target,那么在数组的左边部分寻找。

    我觉得这左右两部分的判断条件是不等价的,我们只能用排除法,现在有把握的部分搜索,这部分能找到更好。不能找到呢,换成另外的部分。

如果nums[mid] > nums[left],那么左边的部分是有序的。

  我们再在有序的部分寻找。。。。。

技术分享
int search(const vector<int> &nums,int target){
        if(nums.size()==0)return -1;
        int left = 0;
        int right = nums.size()-1;
        while(left<=right){
            int mid = (left+right)/2;
            if(nums[mid]==target) return mid;
            else if(nums[mid]<nums[right]){
                ///the right part is sorted
                if(nums[mid]<target && nums[right]>=target)
                    left = mid+1;
                else
                    right = mid-1;
            }else{
                ///the left part is sorted
                if(nums[mid]>target && nums[left]<=target)
                    right = mid-1;
                else
                    left = mid+1;
            }
        }///while
        return -1;
    }
View Code

 

33 Search in Rotated Sorted Array

标签:

原文地址:http://www.cnblogs.com/li-daphne/p/5566373.html

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