一.题目
在一个颠倒了一次的有序数组里查看是否指定数字的索引,如果有返回该数字在数组里的索引,没有返回-1
如:
Input: nums = [4,5,6,7,0,1,2], target = 0 Output: 4二.思路
既然是有序,肯定优先考虑二分查找,不过考虑到某些区域是顺序打乱的,需要对二分查找进行一点的调整即可
三.代码
class Solution { public int search(int[] nums, int target) { return binarySearch(nums,target,0,nums.length-1); } public int binarySearch(int[] nums,int target,int low,int high) { if(low>=high) { if(nums[low]==target) { return low; } return -1; } int mid=(low+high)/2; if(nums[mid]==target) { return mid; } //同时在分成的两段里去查找是否有该数字 int index=binarySearch(nums,target,low,mid-1); return index==-1?binarySearch(nums,target,mid+1,high):index; } }