使用二分搜索分别搜索左边界和右边界
import java.util.*; public class Solution { public ArrayList<Integer> searchRange (ArrayList<Integer> nums, int target) { ArrayList<Integer> res = new ArrayList<>(); res.add(left_bound(nums,target)); res.add(right_bound(nums,target)); return res; } private int left_bound(ArrayList<Integer> nums, int target){ int left = 0,right = nums.size()-1; while(left <= right){ int mid = left + (right-left)/2; if(nums.get(mid) == target){ right = mid-1; }else if(nums.get(mid) < target){ left = mid+1; }else if(nums.get(mid) > target){ right = mid-1; } } if(left == nums.size()){ return -1; } return nums.get(left) == target?left:-1; } private int right_bound(ArrayList<Integer> nums,int target){ int left = 0,right = nums.size()-1; while(left <= right){ int mid = left+(right-left)/2; if(nums.get(mid) == target){ left = mid+1; }else if(nums.get(mid) < target){ left = mid+1; }else if(nums.get(mid) > target){ right = mid-1; } } if(left-1<0){ return -1; } return nums.get(left-1) == target ? left-1:-1; } }