LeetCode 34 在排序數組中查找元素的第一個和最後一個位置

給定一個按照升序排列的整數數組 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%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章