LeetCode @ Search in Rotated Sorted Array 旋转数组查找

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.

来源于Code_Ganker:http://blog.csdn.net/linhuanmars/article/details/20525681
1.my_idea:因为是旋转数组,则一定至少有一半是有序的
2."因为rotate,当我们切取一半的时候可能会出现误区,所以要进一步判断。每次迭代中,分三种情况:"
(1)如果target==A[mid],直接返回mid;
(2)如果A[mid]<A[right],那么(mid,right)一定有序;进一步如果target属于有序区间(A[mid],A[right]】,则left=mid+1,否则target在leftHalf,则right=mid-1。

(3)如果A[mid]>=A[right],那么(mid,right)一定无序,既从left到mid有序;进一步如果target属于有序区间【A[left],A[mid]),则right=mid-1,否则在rightHalf,则left=mid+1。

3.每次切掉一半数据,所以算法的时间复杂度是O(logn),空间复杂度是O(1)。

<span style="font-size:12px;">public class Solution {
    public int search(int[] A, int target) {
        int left=0;
        int right=A.length-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(A[mid]==target)   //(1)一定要先写找到的case
                return mid;
            if(A[mid]<A[right]){ //(2)右边有序
                if (A[mid]<target && target<=A[right])//如果在有序区间
                    left=mid+1;
                else
                    right=mid-1;
            }
            else{                //(3)左边有序
                if(A[left]<=target && target<A[mid])//如果在有序区间
                    right=mid-1;
                else
                    left=mid+1;
            }
        }
        return -1;
    }
}</span>

【后记】这个if判断没有和别的题目统一,所以直接看后面LeetCode二分查找总结就好。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值