zoukankan      html  css  js  c++  java
  • 剑指offer37:统计一个数字在排序数组中出现的次数

    1 题目描述

      统计一个数字在排序数组中出现的次数。

    2 思路和方法

      (1)查找有序数组,首先考虑使用二分查找,使时间复杂度为O(log n)。更改二分查找的条件,不断缩小区间,直到区间头和区间尾均为k时停止,计算得到区间长度。O(n*log(n))。

      (2)两行代码就搞定,就是用C++ stl里面的lower_boundupper_bound,lower_bound是找出不小于即大于等于的第一个数的下标 ;upper_bound是找出大于的第一个数的下标

    3 C++核心代码

    (1)

     1 class Solution {
     2 public: // 二分查找 O(log n)
     3     int GetNumberOfK(vector<int> data ,int k) {
     4         if (data.size() <=0)
     5             return 0;
     6         int count = 0;
     7         int begin = 0;
     8         int end = data.size()- 1;
     9 
    10         while (begin<=end){
    11             int mid = (begin + end) /2;
    12             if (data[begin]==k && data[end] == k)
    13                 break;
    14 
    15             // 缩小start和end的范围,使start指向第一个k,end指向最后一个k
    16             if (data[begin] < k)
    17                 ++begin;
    18             if (data[end] > k)
    19                 --end;
    20 
    21             if (data[mid]< k){
    22                 end = mid -1;
    23             } else if (data[mid] > k){
    24                 begin = mid +1;
    25             }
    26         }
    27         if (data[begin] ==k && data[end]==k)
    28             return end - begin +1 ; // beg和end分别对应第一个和最后一个k所在位置
    29         else
    30             return 0;     // beg>end 不存在该元素
    31 
    32     }
    33 };
    View Code

    (2)

     1 class Solution 
     2 {
     3 public:
     4     int GetNumberOfK(vector<int> data ,int k)
     5     {
     6         int s1 = lower_bound(data.begin(),data.end(),k)-data.begin();
     7         int s2 = upper_bound(data.begin(),data.end(),k)-data.begin();
     8         //cout<<s1<<" "<<s2<<endl;
     9         return s2-s1;
    10     }
    11 };
    View Code

    参考资料

    https://blog.csdn.net/zjwreal/article/details/88774692

  • 相关阅读:
    HTML <iframe> 标签
    HTML <tr> 标签
    HTML <img> 标签的 border 属性
    jQuery ajax ajax() 方法
    CSS padding 属性
    SQL Server CONVERT() 函数
    CSS overflow 属性
    HTML <input> 标签
    Java动态代理一——动态类Proxy的使用
    Java拆箱装箱小结
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11421309.html
Copyright © 2011-2022 走看看