zoukankan      html  css  js  c++  java
  • 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};
        }
    };
  • 相关阅读:
    玲珑学院-ACM比赛1014
    扩展欧几里得算法
    中国剩余定理(孙子定理)及实现----原理详解
    搞懂树状数组
    HDU3792---Twin Prime Conjecture(树状数组)
    树状数组 模板
    HDU1541--Stars(树状数组)
    HDU4046--Panda(树状数组)
    CCF-201604-1-折点计数
    CCF-201604-2-俄罗斯方块
  • 原文地址:https://www.cnblogs.com/510602159-Yano/p/4279096.html
Copyright © 2011-2022 走看看