LeetCode 33. Search in Rotated Sorted Array

来源:互联网 发布:mac 翻墙付费软件 编辑:程序博客网 时间:2024/05/22 13:30

Suppose an array sorted in ascending order 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.

一个排好序,没有重复项的数组,把前面一段截下来接到数组尾部,在这个数组中找到目标的索引。

这题很简单,把所有情况考虑清楚即可。

public class Solution {    public int search(int[] nums, int target) {        if(nums.length==0){            return -1;        }            if(nums[0]==target){            return 0;        }        return help(nums,0,nums.length-1,target);    }    public int help(int[]nums,int beg,int end,int target){        if(beg>=end){            return nums[beg]==target?beg:-1;        }        int mid = (beg+end)/2;        if(target>nums[beg]&&target<nums[mid]&&nums[beg]<nums[mid]){            return help(nums,beg,mid,target);        }        else if(target<nums[beg]&&target<nums[mid]&&nums[beg]<nums[mid]){            return help(nums,mid,end,target);        }        else if(target>nums[beg]&&target>nums[mid]&&nums[beg]>nums[mid]){            return help(nums,beg,mid,target);        }        else if(target<nums[beg]&&target>nums[mid]&&nums[beg]>nums[mid]){            return help(nums,mid,end,target);        }        else if(target>nums[beg]&&target>nums[mid]&&nums[beg]<nums[mid]){            return help(nums,mid,end,target);        }        else if(target<nums[beg]&&target<nums[mid]&&nums[beg]>nums[mid]){            return help(nums,beg,mid,target);        }        else{            if(target==nums[beg]){                return beg;            }            if(target==nums[end]){                return end;            }            return target==nums[mid]?mid:-1;        }    }}


原创粉丝点击