美文网首页
LeetCode34.在排序数组中查找元素的第一个和最后一个位置

LeetCode34.在排序数组中查找元素的第一个和最后一个位置

作者: LHH大翰仔仔 | 来源:发表于2019-02-17 23:06 被阅读1次

    给定一个按照升序排列的整数数组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]

    答案参考:

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[]}
     */
    var searchRange = function (nums, target) {
        let targetIndex = binarySearch(nums, target, 0, nums.length - 1)
        if (targetIndex == -1) return [-1, -1]
        let l = targetIndex, r = targetIndex
        while(l > 0 && nums[l - 1] == target){
            l--
        }
        while(r < nums.length - 1 && nums[r + 1] == target){
            r++
        }
        return [l, r]
    };
    
    function binarySearch(arr, val, lo, hi) {
        if (hi < lo) return -1
        let mid = lo + parseInt((hi - lo) / 2)
    
        if (val < arr[mid]) {
            return binarySearch(arr, val, lo, mid - 1)
        } else if (val > arr[mid]) {
            return binarySearch(arr, val, mid + 1, hi)
        } else {
            return mid
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode34.在排序数组中查找元素的第一个和最后一个位置

          本文链接:https://www.haomeiwen.com/subject/qrtoeqtx.html