public class Test34 { public static void main(String[] args) { int[] nums = {8,8}; int[] a =searchRange(nums, 8); for(int i = 0; i < 2; i++) System.out.println(a[i]); } public static int[] searchRange(int[] nums, int target) { int[] a ={-1,-1}; if(nums.length < 1) return a; int l = 0,r = nums.length - 1; while(l <= r) { int m = (l + r)/2; if(nums[m] == target){ a[0] = m; a[1] = m; break; } if(nums[m] < target) l = m +1; if(nums[m] > target) r = m -1; } //二分查找结束,a中返回的为其中一个值的位置,只要看这个位置前后两个位置的坐标赋值给a的另一个元素 while(a[1] + 1 < nums.length && nums[a[1] + 1] == target) a[1] = a[1] +1; while(a[0] - 1 >= 0 && nums[a[0] - 1] == target) //m目标前一个位置是不是目标值 a[0] = a[0] - 1; return a; } } 程序主要思想:先用二分查找找到目标值,然后查找其前面和后面的值,找到边缘即可