zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    v-cloak
    MVVM
    初识ajax
    装瓶学习法
    回调函数(call back)
    如何让学习变得纯粹?
    异步
    grep用法
    Shell中的&&与||的区别
    shell中使用>/dev/null 2>&1 丢弃信息
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8301439.html
Copyright © 2011-2022 走看看