• 61. 搜索区间


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

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

    样例

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

    返回[3, 4]

    挑战 

    时间复杂度 O(log n)

    应该要第一时间反应到二分,就算没有想到看到这个时间复杂度也要想到了

    总体思路就是用二分找到target再前后搜索下就行了

     1 vector<int> searchRange(vector<int> &A, int target) {
     2         // write your code here
     3         vector<int> res;
     4         if(A.empty() ||target < A[0] || target > A[A.size() - 1]){ 
     5             res.push_back(-1);
     6             res.push_back(-1);
     7             return res;  
     8         }  
     9         
    10         int low=0,high=A.size();
    11         int mid;
    12         int start,end;
    13         while(low<=high){
    14             mid=low+(high-low)/2;
    15             if(A[mid]==target){
    16                 start=mid-1;
    17                 end=mid+1;
    18                 while (end < A.size() && A[end] == target) {
    19                     end++;
    20                 }
    21                 while (start >= 0 && A[start] == target ) {
    22                     start--; 
    23                 }
    24                 res.push_back(start + 1);
    25                 res.push_back(end - 1);
    26                 return res;
    27             }
    28             
    29             if(A[mid]>target){
    30                 high=mid-1;
    31             }
    32             else{
    33                 low=mid+1;
    34             }
    35         }
    36         res.push_back(-1);
    37         res.push_back(-1);
    38         return res; 
    39     }
  • 相关阅读:
    4259. 残缺的字符串
    BZOJ3451. Tyvj1953 Normal
    BZOJ3509. [CodeChef] COUNTARI
    BZOJ3527: [Zjoi2014]力
    BZOJ2194. 快速傅立叶之二
    Educational Codeforces Round 69 (Rated for Div. 2) A~D Sloution
    hibernate对单表的增删改查
    spring中的AOP
    spring笔记二
    struts2的验证
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8301439.html
Copyright © 2020-2023  润新知