- class Solution {
- //旋转数组从中间分开,总有一侧是有序的,一侧是无序的
- //只需要判断是否在有序区间就可以进行二分查找
- public int search(int[] nums, int target) {
- int left = 0, right = nums.length - 1;
- while(left <= right){
- int mid = (left + right) / 2;
- if(target == nums[mid]) return mid;
- //如果左侧有序
- if(nums[left] <= nums[mid]){
- //如果target也在左侧
- if(nums[left] <= target && target < nums[mid]){
- right = mid - 1;
- }
- //在右侧
- else{
- left = mid + 1;
- }
- }
- else{
- if(target <= nums[right] && target > nums[mid]){
- left = mid + 1;
- }
- else{
- right = mid - 1;
- }
- }
- }
- return -1;
- }
- }