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

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

作者: geaus | 来源:发表于2020-05-12 23:01 被阅读0次

题目描述

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

解题思路

二分查找。需要分别查找上下边界。如果是查找下界的话,当找到target的值则high=mid,继续查找直到!(low<high);同理上边界。

int helper(vector<int>& nums, int target, bool left){
    int low=0;
    int high=nums.size()-1;
    int mid;
    while(low<high){
        mid = (low+high)/2;
        if(nums[mid]>target || (left && nums[mid]==target))
            high = mid;
        else
            low = mid + 1;
    }
    return nums[mid]==target ? mid : -1;
}
vector<int> SearchRange(vector<int>& nums, int target){
    int left = helper(nums, target, true);
    int right = helper(nums, target, false);
    return vector<int> {left, right};
}

相关文章

网友评论

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

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