【C++】【LeetCode】34. Search for a Range

来源:互联网 发布:java集合的概念 编辑:程序博客网 时间:2024/05/16 14:16

题目

Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm’s runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1].
For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].

思路

先用二分法找到某个target所在下标,然后往前后遍历,直到遍历到不同元素。

代码

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        vector<int> range;        int left = 0;        int right = nums.size() - 1;        while (left <= right) {            int mid = (left + right) / 2;            if (target == nums[mid]) {                int begin = mid;                int end = mid;                while (begin >= 0 && nums[begin] == target) {                    begin--;                }                while (end < nums.size() && nums[end] == target) {                    end++;                }                return {begin+1, end-1};            } else if (target < nums[mid]) {                right = mid - 1;            } else if (target > nums[mid]) {                left = mid + 1;            }        }        return {-1, -1};    }};
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国通石油卡怎么办红卡 善融商城有假货怎么办 中百购物卡丢了怎么办 cncbk被骗25万该怎么办 中银e贷额度冻结怎么办 招行抵押贷循环额度怎么办 小额钱袋被拒了怎么办 银行需要提供消费贷款发票怎么办 中银e贷款逾期怎么办 按揭房不想要了怎么办 房贷不想还了怎么办 融e借没有u盾怎么办 窗式空调声音大怎么办 瑞得卡过期了怎么办 对公账号转错了怎么办 中银e令丢了怎么办 中银e贷到期了怎么办 招行信用卡附属卡怎么办 华普超市购物卡怎么办 公司发超市购物卡怎么办 物美购物卡丢了怎么办 淘宝买肯德基电子券留错号码怎么办 京东e卡过期了怎么办 京东e卡绑定错了怎么办 手机换号京东账号绑的银行卡怎么办 京东金条激活失败怎么办 京东买的k3不能激活怎么办 优购手机光黑屏怎么办 优购手机忘记手势密码怎么办 消费卡过期了钱怎么办 超市卡过期了钱怎么办 宜家购物卡的钱怎么办 武商购物卡过期怎么办 丹尼斯卡过期了怎么办 联华ok卡过期了怎么办 汉购通过期了怎么办 天猫退货要检测报告怎么办 京东退货后发票怎么办 京东金融被盗刷怎么办 京东e卡丢了怎么办 京东e卡没有密码怎么办