zoukankan      html  css  js  c++  java
  • leetcode116:search-for-a-range

    题目描述

    给出一个有序数组,请在数组中找出目标值的起始位置和结束位置
    你的算法的时间复杂度应该在O(log n)之内
    如果数组中不存在目标,返回[-1, -1].
    例如:
    给出的数组是[5, 7, 7, 8, 8, 10],目标值是8,
    返回[3, 4].

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


    示例1

    输入

    复制
    [5, 7, 7, 8, 8, 10],8

    输出

    复制
    [3,4]
    

    class Solution {
    public:
        /**
         *
         * @param A int整型一维数组
         * @param n int A数组长度
         * @param target int整型
         * @return int整型vector
         */
        vector<int> searchRange(int* A, int n, int target) {
            // write code here
            vector< int> res(2,-1);
            if (A==nullptr || n<=0)
                return res;
            int low=lower_bound(A, A+n, target)-A;
            if (low==n || A[low]!=target)
                return res;
            else res[0]=low;
            int high=upper_bound(A, A+n,target)-A-1;
            res[1]=high;
            return res;
            
        }
    };

    class Solution {
    public:
        /**
         *
         * @param A int整型一维数组
         * @param n int A数组长度
         * @param target int整型
         * @return int整型vector
         */
        vector<int> searchRange(int* A, int n, int target) {
            // write code here
            vector<int> res(2,-1);
            if (A==nullptr || n<=0)
                return res;
            int low=0,high=n-1;
            while (low<=high)
            {
                int middle =(high+low)>>1;
                if (A[middle]<target)
                    low=middle+1;
                else
                    high=middle-1;
                
            }
            int low2=0,high2=n-1;
            while (low2<=high2)
            {
                int middle2=(high2+low2)>>1;
                if (A[middle2]<=target)
                    low2=middle2+1;
                else
                    high2=middle2-1;
                
            }
            if (low<=high2){
                res[0]=low;
                res[1]=high2;
                
            }
            return res;
        }
        
    };
  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/hrnn/p/13413969.html
Copyright © 2011-2022 走看看