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

【Leetcode】Search in Rotated Sorted Array

时间:2014-06-26 13:58:53      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   tar   color   

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.

思路:因为是有序序列的变种,可以考虑应用二分查找。有两种分类讨论方式,一种是根据A[middle]与target的值比较进行讨论;一种是根据找出序列中的递增序列然后继续讨论。

代码一:

class Solution {
public:
    int search(int A[], int n, int target) {
        if(n <= 0)  return -1;
        
        int left = 0;
        int right = n - 1;
        int middle = 0;
        
        while(left <= right)
        {
            middle = (left + right) / 2;
            
            if(A[middle] == target)
                return middle;
            else if(A[middle] < target)
            {
                if(A[left] >= A[middle] && A[right] < target)
                    right = middle - 1;
                else
                    left = middle + 1;
            }
            else
            {
                if(A[right] <= A[middle] && A[left] > target)
                    left = middle + 1;
                else
                    right = middle - 1;
            }
        }
        
        return -1;
    }
};

代码二:

class Solution {
public:
    int search(int A[], int n, int target) {
        if(n <= 0)  return -1;
        
        int left = 0;
        int right = n - 1;
        int middle = 0;
        
        while(left <= right)
        {
            middle = (left + right) / 2;
            
            if(A[middle] == target)
                return middle;
            
            if(A[left] <= A[middle])
            {
                if(A[left] <= target && target < A[middle])
                    right = middle - 1;
                else
                    left = middle + 1;
            }
            else
            {
                if(A[middle] < target && target <= A[right])
                    left = middle + 1;
                else
                    right = middle - 1;
            }
        }
        
        return -1;
    }
};

【Leetcode】Search in Rotated Sorted Array,布布扣,bubuko.com

【Leetcode】Search in Rotated Sorted Array

标签:style   class   blog   code   tar   color   

原文地址:http://blog.csdn.net/lipantechblog/article/details/34515925

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