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

[LeetCode] Search in Rotated Sorted Array

时间:2015-07-23 23:20:54      阅读:122      评论: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).

  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.

 

解题思路:

  这是一个查找的问题,首先,从头到尾遍历一遍肯定可以解决,但花费的时间为O(n),这里就需要思考其他的解法。

  对于这个部分有序的数组可以试着采用二分查找,需要解决的问题是如何去缩小查找目标所在的范围。

  反转的有序数组可能出现以下三种情况:

  技术分享

  我们可以据此分情况讨论,具体参见代码

  

int search(int* nums, int numsSize, int target) {
    int first = 0, end = numsSize - 1;
    
    while(first <= end){
        int mid = first + (end - first) / 2;
        if(nums[mid] == target)
            return mid;
        
        if(nums[first] <= nums[mid]){
            if(nums[first] <= target && nums[mid] > target)
                end = mid - 1;
            else
                first = mid + 1;
        }
        else{
            if(nums[mid] < target && nums[end] >= target)
                first = mid + 1;
            else
                end = mid - 1;
        }
    }
    return -1;
}

 

  

[LeetCode] Search in Rotated Sorted Array

标签:

原文地址:http://www.cnblogs.com/codinglol/p/4671984.html

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