zoukankan      html  css  js  c++  java
  • [LintCode] Search For A Range

    给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。

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

    样例

    给出[5, 7, 7, 8, 8, 10]和目标值target=8,

    返回[3, 4]

    通过找出target的左边界(详解见[LintCode] First Position Of Target),利用相同的思路找出target右边界即可。代码如下:

    class Solution {
    public:
        /*
         * @param A: an integer sorted array
         * @param target: an integer to be inserted
         * @return: a list of length 2, [index1, index2]
         */
        vector<int> searchRange(vector<int> &A, int target) {
            // write your code here
            if (A.empty())
                return {-1, -1};
            int lower = 0, upper = 0, mid = 0;
            int left = 0, right = A.size() - 1;
            while (left <= right) {
                mid = left + (right - left) / 2;
                if (A[mid] < target)
                    left = mid + 1;
                else
                    right = mid - 1;
            }
            lower = left;
            
            left = 0, right = A.size() - 1;
            while (left <= right) {
                mid = left + (right - left) / 2;
                if (A[mid] > target)
                    right = mid - 1;
                else
                    left = mid + 1;
            }
            upper = right;
            
            if (lower <= upper) 
                return {lower, upper};
            else
                return {-1, -1};
        }
    };
    // 816 ms
  • 相关阅读:
    最短路小变形
    最短路
    bfs + 路径输出
    优先队列
    dijkstra
    重载运算符-operator
    最短路
    二分图匹配
    依赖型的关系建立
    string 类
  • 原文地址:https://www.cnblogs.com/immjc/p/7989097.html
Copyright © 2011-2022 走看看