給你一個按照非遞減順序排列的整數數組?
nums
,和一個目標值?target
。請你找出給定目標值在數組中的開始位置和結束位置。如果數組中不存在目標值?
target
,返回?[-1, -1]
。你必須設計并實現時間復雜度為?
O(log n)
?的算法解決此問題。
代碼:
class Solution{public int[] searchRange(int[] nums, int target) {int left = search(nums,taget,true);// 查找目標值的左邊界int right = search(nums,target,false);// 查找目標值的右邊界return new int[]{left,right}; // 返回左右邊界組成的數組}private int search(int[] nums, int target, boolean flag){int left = 0, right = nums.length - 1;int result = -1;// 結果初始化為-1,表示未找到目標值while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target) {result = target;if(flag){//查找左邊界right = mid - 1;/ 縮小右邊界}else{ //查找右邊界left = mid + 1;/ 縮小左邊界}}else if(nums[mid] < target) {// 目標值在右半部分left = mid + 1; // 縮小左邊界}else{right = mid - 1;// 縮小右邊界}}return result;}}