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

题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

如果数组中不存在目标值,返回 [-1, -1]。

示例:输入: nums = [5,7,7,8,8,10], target = 8  输出: [3,4]

java代码

class Solution {

    private int extremeInsertionIndex(int[] nums,int target,boolean left) {

            int lo = 0;

            int hi = nums.length;

            while(lo < hi) {

                int mid = (lo + hi) / 2;

                if(nums[mid] > target || (left && target == nums[mid])) {

                    hi = mid;

                }else {

                    lo = mid + 1;

                }

            }

            return lo;

        }


    public int[] searchRange(int[] nums, int target) {

        int[] targetRange = {-1,-1};

        int leftldx = extremeInsertionIndex(nums,target,true);

        if(leftldx == nums.length || nums[leftldx] != target) {

            return targetRange;

        }

        targetRange[0] = leftldx;

        targetRange[1] = extremeInsertionIndex(nums,target,false) - 1;

        return targetRange;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容