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;
        }
        
    };
  • 相关阅读:
    Python---列表相关操作
    PyCharm使用小技巧--git上传代码至远程仓库
    Linux下修改文件权限
    Linux运行jmeter
    Jmeter添加负载机
    git使用
    Linux之12——常用统计命令之uniq
    Linux之11——常用统计命令之sort
    Linux之10——dd命令详解
    Linux之8——性能调优之iostat命令详解
  • 原文地址:https://www.cnblogs.com/hrnn/p/13413969.html
Copyright © 2011-2022 走看看