首页 > 其他 > 详细

33 Search in Rotated Sorted Array

时间:2016-06-07 12:47:44      阅读:192      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!