0849. Maximize Distance to Closest Person (M)
阿新 • • 發佈:2020-10-29
LeetCode34 在排序陣列中查詢元素的第一個和最後一個位置
題目描述
樣例
演算法分析
-
第一次二分找到 大於等於 target的最小值的位置,即查詢元素的第一個位置a
- 開始位置,
mid>=target
- 開始位置,
-
第二次二分找到 小於等於 target的最大值的位置,即查詢元素的最後一個位置b
- 最終位置,
mid<=target
- 最終位置,
時間複雜度\(O(log(n))\)
Java程式碼
class Solution { public int[] searchRange(int[] nums, int target) { if(nums.length == 0) return new int[]{-1, -1}; int n = nums.length; int l = 0; int r = n -1; while(l < r){ int mid = l + r >> 1; if(nums[mid] >= target ) r = mid; else l = mid + 1; } int a = l; l = 0; r = n - 1; while(l < r){ int mid = l + r + 1>> 1; if(nums[mid] <= target) l = mid; else r = mid - 1; } int b = l; if(nums[a] != target || nums[b] != target) return new int[]{-1, -1}; return new int[]{a, b}; } }