
二分查找
public int search(int[] nums, int target) { if (nums == null || nums.length == 0) { return -1; } int mid,start = 0,end = nums.length - 1; while (start <= end) { mid = start + (end - start) / 2; //防止越界 if (nums[mid] == target) { //中间值是目标值则直接返回 return mid; } //如果前半部分有序,注意此处用小于等于 if (nums[start] <= nums[mid]) { //如果target在前半部分 将end-1 if (target >= nums[start] && target < nums[mid]) { end = mid - 1; } else { //如果target在前半部分 将start+1 start = mid + 1; } } else { //如果后半部分有序 //如果target在后半部分 if (target <= nums[end] && target > nums[mid]) { start = mid + 1; } else { //如果target在前半部分 end = mid - 1; } } } return -1; }