LeetCode 034 Search for a Range

题目要求:Search for a Range

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].

 

分析:

lower_bound():

lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个不小于value 的值。

 调用lower_bound之前必须确定序列为有序序列,否则调用出错。

 

iterator lower_bound( const key_type &key ): 返回一个 迭代器,指向 键值> = key的第一个元素。
iterator upper_bound( const key_type &key ):返回一个迭代器,指向 键值>  key的第一个元素。
 
例如:map中已经插入了1,2,3,4的话,如果 lower_bound(2)的话,返回的2,而upper_bound(2)的话,返回的就是3
 

代码如下:

class Solution {

public:

    vector<int> searchRange(int A[], int n, int target) {

        

        int l = distance(A, lower_bound(A, A + n, target));

        int u = distance(A, upper_bound(A, A + n, target));

        

        //找不到该元素

        if(A[l] != target)

            return vector<int> {-1, -1};

        else 

            return vector<int> {l, u - 1};

    }

};

 

你可能感兴趣的:(LeetCode)