zoukankan      html  css  js  c++  java
  • 61. Search for a Range【medium】

    61. Search for a Range【medium】

    Given a sorted array of n integers, find the starting and ending position of a given target value.

    If the target is not found in the array, return [-1, -1].

    Example

    Given [5, 7, 7, 8, 8, 10] and target value 8,
    return [3, 4].

    Challenge 

    O(log n) time.

    解法一:

     1 class Solution {
     2 public:
     3     /*
     4      * @param A: an integer sorted array
     5      * @param target: an integer to be inserted
     6      * @return: a list of length 2, [index1, index2]
     7      */
     8     vector<int> searchRange(vector<int> &A, int target) {
     9         if (A.empty()) {
    10             return vector<int>(2, -1);
    11         }
    12         
    13         vector<int> result;
    14         
    15         //find first
    16         int start = 0;
    17         int end = A.size() - 1;
    18         
    19         while (start + 1 < end) {
    20             int mid = start + (end - start) / 2;
    21             if (A[mid] == target) {
    22                 end = mid;
    23             }
    24             else if (A[mid] < target) {
    25                 start = mid;
    26             }
    27             else if (A[mid] > target) {
    28                 end = mid;
    29             }
    30         }
    31         
    32         if (A[start] == target) {
    33             result.push_back(start);
    34         }
    35         else if (A[end] == target) {
    36             result.push_back(end);
    37         }
    38         else {
    39             return vector<int>(2, -1);
    40         }
    41         
    42         //find last
    43         start = 0;
    44         end = A.size() - 1;
    45         
    46         while (start + 1 < end) {
    47             int mid = start + (end - start) / 2;
    48             if (A[mid] == target) {
    49                 start = mid;
    50             }
    51             else if (A[mid] < target) {
    52                 start = mid;
    53             }
    54             else if (A[mid] > target) {
    55                 end = mid;
    56             }
    57         }
    58         
    59         if (A[end] == target) {
    60             result.push_back(end);
    61         }
    62         else if (A[start] == target) {
    63             result.push_back(start);
    64         }
    65         
    66         return result;
    67     }
    68 };
  • 相关阅读:
    R语言高级编程系列之面向对象的类型系统--S3对象
    数据挖掘之KNN算法(C#实现)
    数据挖掘之决策树ID3算法(C#实现)
    C#矩阵运算类库
    2020年图机器学习的最新趋势
    ios开发笔记-7-bug解决
    ios开发笔记-6-ReactiveCocoa
    ios开发笔记-5-配置文件
    ios开发笔记-4-app打包测试流程
    ios开发笔记-3-微信支付
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7552573.html
Copyright © 2011-2022 走看看