zoukankan      html  css  js  c++  java
  • 【LeetCode】34. Search for a Range

    Given an array of integers sorted in ascending order, 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].

    题意:找出已排序数组中指定元素的起止位置。

    思路:因为要求时间复杂度为O(logn),所以用二分法

      1.利用二分法确定指定元素的起始位置,同时确定该数组中是否存在该元素

      2.利用二分法确定元素的终止位置

     1 class Solution {
     2 public:
     3     vector<int> searchRange(vector<int>& nums, int target) {
     4     
     5     int left=0,right=nums.size()-1;
     6     int mid;
     7     vector<int> res(2,-1);
     8     if(!nums.size()) return res;
     9     while(left<right){
    10         mid=(left+right)/2;
    11         if(nums[mid]<target) left=mid+1;
    12         else right=mid;
    13     }
    14     if(nums[left]!=target) return res;
    15     else res[0]=left;
    16     right = nums.size()-1;
    17     while(left<right){
    18         mid=(left+right)/2+1;                   //注意!!
    19         if(nums[mid]>target) right=mid-1;
    20         else left=mid;
    21     }
    22     res[1]=right;
    23     return res;
    24     }
    25 };
  • 相关阅读:
    git常用命令
    代码实现-栈、队列、双端队列
    websocket实现简单的单聊
    websocket实现简单的群聊
    成员
    反射
    类与类之间的关系
    常用模块-02
    模块
    微信小程序表单多页面步骤提交
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6292730.html
Copyright © 2011-2022 走看看