Search in Rotated Sorted Array

来源:互联网 发布:php开源站群管理系统 编辑:程序博客网 时间:2024/05/21 13:50

**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.

Subscribe to see which companies asked this question
**


C++

class Solution {public:    int search(vector<int>& nums, int target) {        int first = 0;        int last = nums.size();        while(first != last)        {            const int mid = first + (last - first) / 2;            if(nums[mid] == target)                return mid;            if(nums[first] <= nums[mid])            {                if(nums[first] <= target && target < nums[mid])                    last = mid;                else                    first = mid + 1;            }            else            {                if(nums[last-1] >= target && target > nums[mid])                    first = mid + 1;                else                    last = mid;            }        }        return -1;    }};

Java

public class Solution {    public int search(int[] nums, int target) {        int first = 0;        int last = nums.length;        while(first != last)        {            int mid = first + (last - first) / 2;            if(nums[mid] == target)                return mid;            if(nums[first] <= nums[mid])            {                if(nums[first] <= target && target < nums[mid])                    last = mid;                else                    first = mid + 1;            }            else            {                if(nums[last-1] >= target && target > nums[mid])                    first = mid  + 1;                else                    last = mid;            }        }        return -1;    }}

Python

class Solution(object):    def search(self, nums, target):        """        :type nums: List[int]        :type target: int        :rtype: int        """        first = 0        last = len(nums)        while(first != last):            mid = first + (last - first) / 2;            if(nums[mid] == target):                return mid            if(nums[mid] >= nums[first]):                if(nums[first] <= target and target < nums[mid]):                    last = mid                else:                    first = mid + 1            else:                if(nums[mid] < target and target <= nums[last-1]):                    first = mid + 1                else:                    last = mid        return -1
0 0
原创粉丝点击