题意:
给一个升序数组,和一个目标数。查找目标数,没找到返回[-1, -1],找到返回目标数的起始坐标和中点坐标
分析:
二分查找。
3333388888444444
找8,mid一下就落到8上,所以这个时候,如果low,high不等于teget,那么就顺序(逆序)移动。
可能是8888888888 或者 3888888884,当然,如果这时候low,high也都等于target了,直接返回
如果mid没有落在target上,还是按照一般二分查找就可以,稍微想一下就知道是符合要求的。
代码很容易了:
public class Solution { public int[] searchRange(int[] nums, int target) { int low = 0; int high = nums.length-1; while(low <= high){ int mid = low + (high-low)/2; if(nums[mid] == target){ if(nums[low] == target && nums[high] == target){ return new int[]{low, high}; } if(nums[low] != target){ low++; } if(nums[high] != target){ high--; } }else if(nums[mid] < target){ low = mid + 1; }else{ high = mid - 1; } } return new int[]{-1, -1}; } }