Leet Code 33 搜索旋转后的有序数组 - Java

问题原始链接 https://leetcode.com/problems/search-in-rotated-sorted-array

假设一个有序数组经过了旋转,例如 [0 1 2 4 5 6 7] 经过旋转变成了 [4 5 6 7 0 1 2]。

你需要搜索一个给定值,如果找到则返回索引,否则返回-1。

你可以假设数组中没有重复元素。

思路:采用二分查找法解决该问题。

public class Solution {
  public static int search(int[] nums, int target) {
    if (nums == null || nums.length == 0) {
      return -1;
    }

    return search(nums, target, 0, nums.length - 1);
  }

  private static int search(int[] nums, int target, int low, int high) {
    if (low > high) {
      return -1;
    }

    if (low == high) {
      return nums[low] == target ? low : -1;
    }

    int mid = (low + high) >> 1;
    if (nums[mid] == target) {
      return mid;
    }

    if (nums[low] <= nums[mid]) {
      if (nums[low] <= target && target < nums[mid]) {
        return search(nums, target, low, mid - 1);
      } else {
        return search(nums, target, mid + 1, high);
      }
    } else {
      if (nums[mid] < target && target <= nums[high]) {
        return search(nums, target, mid + 1, high);
      } else {
        return search(nums, target, low, mid - 1);
      }
    }
  }
}

 

转载于:https://my.oschina.net/mistymarch/blog/689729

你可能感兴趣的:(Leet Code 33 搜索旋转后的有序数组 - Java)