import java.util.*; /** * NC307 在升序数组中查找元素的位置 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型ArrayList * @param target int整型 * @return int整型ArrayList */ public ArrayList<Integer> searchRange (ArrayList<Integer> nums, int target) { return solution(nums, target); } /** * 二分 * @param nums * @param target * @return */ private ArrayList<Integer> solution(ArrayList<Integer> nums, int target){ int n = nums.size(); ArrayList<Integer> result = new ArrayList<>(); // down: target下界 int down = -1; // 二分查找target下界 int left = 0; int right = n-1; int mid; while(left <= right){ mid = (left+right)>>1; if(nums.get(mid) < target){ left = mid+1; }else if(nums.get(mid) > target){ right = mid-1; }else{ down = mid; right = mid-1; } } // target未找到 if(down == -1){ result.add(-1); result.add(-1); return result; } // up: target上界 int up = -1; // 二分查找target上界(可从down开始) left = down; right = n-1; while(left <= right){ mid = (left+right)>>1; if(nums.get(mid) < target){ left = mid+1; }else if(nums.get(mid) > target){ right = mid-1; }else{ up = mid; left = mid+1; } } result.add(down); result.add(up); return result; } }