题目: 搜索旋转排序数组

来自智得网
跳转至: 导航、​ 搜索

分析

二分法前后两次查询的时候如果发现左边的数字大于右侧的数字,说明其中发生了旋转。

找到其中旋转的精确位置。

之后在两侧分别使用二分法搜索数组。

题解

二分法

public class Solutiion {

	public static int solute(nums[] a, int target) {
	    int left = 0;
        int right = a.length-1;
        int position = -1;
        while(left<=right) {
        	int mid = (left+right)/2;
        	if(nums[mid] == target) {
        		return mid;
        	}else if(nums[mid]<=nums[right]) {
        		if(target>=nums[mid] && target <= nums[right]) {
        			left = mid+1;
        		}else {
        			right = mid-1;
        		}
        	}else {
        		if(target<=nums[mid] && target >= nums[L]) {
        			right = mid-1;
        		}else {
        			left = mid+1;
        		}
        	}
        }
		return position;
    }
}