Leetcode 34 - Search for a Range

来源:互联网 发布:网络电视机顶功能 编辑:程序博客网 时间:2024/05/22 11:33

Given a sorted array of integers, 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].

思路:题目要求时间复杂度为O(log n),故使用binary search实现。先找到target,再确定target的范围即可。

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        vector<int> result;        int left = 0,right = nums.size()-1;        int mid;        int a,b;        //Binary Search        while(left<=right){            mid = (left+right)/2;            //找到target            if(nums[mid] == target){                a = left;                b = right;                //确定范围(Range)                while(nums[a]!=target) a++;                while(nums[b]!=target) b--;                result.push_back(a);                result.push_back(b);                return result;            }            else{                if(nums[mid]>target) right = mid - 1;                if(nums[mid]<target) left = mid + 1;            }        }        return {-1,-1};    }};
0 0
原创粉丝点击