給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。
你的算法時間複雜度必須是 O(log n) 級別。
如果數組中不存在目標值,返回 [-1, -1]。
-
示例 1:
輸入: nums = [5,7,7,8,8,10], target = 8
輸出: [3,4] -
示例 2:
輸入: nums = [5,7,7,8,8,10], target = 6
輸出: [-1,-1]
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] pos = {-1, -1};
if(nums == null || nums.length == 0){
return pos;
}
int L = 0;
int R = nums.length - 1;
while (L <= R) {
int mid = L + ((R - L) >>> 1);
if (nums[mid] < target) {
L = mid + 1;
} else
R = mid - 1;
}
pos[0] = L < nums.length && nums[L] == target ? L : -1; //注意索引越界判斷
//System.out.println("第一次出現的位置:" + pos[0]);
if (pos[0] == -1){
return pos;
}
R = nums.length - 1;
while(L <= R){
int mid = L + ((R - L) >>> 1);
if (nums[mid] <= target){
L = mid + 1;
}else
R = mid - 1;
}
pos[1] = R >= 0 && nums[R] == target ? R : -1; //注意索引越界判斷
//System.out.println("最後一次出現的位置:" + pos[1]);
return pos;
}
}
執行用時 : 1 ms, 在所有 Java 提交中擊敗了98.77%的用戶
內存消耗 : 38 MB, 在所有 Java 提交中擊敗了99.44%的用戶