题目

image.png

思路

  • 如果中间的数小于最右边的数,则右半段是有序的,若中间数大于最右边数,则左半段是有序的,我们只要在有序的半段里用首尾两个数组来判断目标值是否在这一区域内,这样就可以确定保留哪半边了

    代码

    1. public int search(int[] nums, int target) {
    2. int len = nums.length;
    3. int left = 0, right = len-1;
    4. while(left <= right){
    5. int mid = (left + right) / 2;
    6. if(nums[mid] == target)
    7. return mid;
    8. else if(nums[mid] < nums[right]){
    9. if(nums[mid] < target && target <= nums[right])
    10. left = mid+1;
    11. else
    12. right = mid-1;
    13. }
    14. else{
    15. if(nums[left] <= target && target < nums[mid])
    16. right = mid-1;
    17. else
    18. left = mid+1;
    19. }
    20. }
    21. return -1;
    22. }
    搜索旋转排序数组