成都创新互联网站制作重庆分公司

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

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

湛河ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

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

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

示例 1:

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

代码实现


class Solution {
public:
    int left_index(vector& nums,int target)
    {
        int begin = 0;
        int end = nums.size() - 1;
        while(begin <= end)
        {
           int mid = (begin + end) / 2;
            if(nums[mid] == target)
            {
                if(mid == 0 || nums[mid - 1] < target)
                {
                    return mid;
                }
                end = mid - 1;
            }
            else if(target < nums[mid])
            {
                end = mid - 1;
            }
            else if(target > nums[mid])
            {
                begin = mid + 1;
            }
        }
        return -1;
        }
        int right_index(vector& nums,int target)
        {
            int begin = 0;
            int end = nums.size() - 1;
            while(begin <= end)
            {
              int mid = (begin + end) / 2;
                if(nums[mid] == target)
                {
                    if(mid == nums.size() - 1 || nums[mid + 1] > target)
                    {
                        return mid;
                    }
                    begin = mid + 1;
                }
                else if(target < nums[mid])
                {
                    end = mid - 1;
                }
                else if(target > nums[mid])
                {
                    begin = mid + 1;
                }
            }
            return -1;
        }    
    vector searchRange(vector& nums, int target) {
        vector result;
        result.push_back(left_index(nums,target));
        result.push_back(right_index(nums,target));
        return result;
    }
};

网站栏目:二分查找--34.在排序数组中查找元素的第一个和最后一个位置
本文来源:http://cxhlcq.com/article/gdhsie.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部