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     }
  • 相关阅读:
    js设计模式(一)---单例模式
    JavaScript---设计模式总结
    js设计模式---单例模式
    js设计模式---工厂模式
    react学习笔记01
    css常用布局
    js 继承
    vue路由动态加载
    vue 项目总结
    css文字两端对齐
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8301439.html
Copyright © 2011-2022 走看看