• 剑指offer(37):数字在升序数组中出现的次数


    题目描述

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

    由于是有序数组所以采用了二分查找

    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            int count = 0;
            if(data.size()==0) return count;
            int low = 0;
            int high = data.size()-1;
            int mid;
            while(low<=high){
                mid = low + (high - low) / 2;
                if(data[mid]==k)
                    break;
                else if(data[mid] > k)
                    high = mid-1;
                else
                    low = mid +1;
            }
            if(low<=high){
                count++;
                int i = mid-1;
                int j = mid+1;
                while(data[i]==k){
                    count++;
                    i--;
                }
                while(data[j]==k){
                    count++;
                    j++;
                }
            }
            return count;
        }
    };

    使用STL库函数equal_range实现:

    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            //也可以将pair<vector<int>::iterator, vector<int>::iterator >替换为auto
            pair<vector<int>::iterator, vector<int>::iterator > resultPair = equal_range(data.begin(), data.end(),k);
            return resultPair.second - resultPair.first;
        }
    };

    equal_range函数解析:https://www.jianshu.com/p/edb6a7655976

    使用STL库函数count实现:

    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            return count(data.begin(),data.end(),k);
        }
    };

    使用STL库函数low_bound、upper_bound实现:

    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            auto start = lower_bound(data.begin(), data.end(), k);
            auto end = upper_bound(data.begin(),data.end(), k);
            return end - start;
        }
    };
  • 相关阅读:
    转载:Android SQLite数据库版本升级原理解析
    Android可移动的Button
    Android详细目录结构
    自动化测试(二)
    不使用if else
    C# 如何实现自己的FormEditor XML Protocol
    C#中的析构函数,GC和IDisposable的用法
    Java中生成和解析JSON
    GCMS笔记
    Android ConstraintLayout的使用(二)
  • 原文地址:https://www.cnblogs.com/ttzz/p/13568142.html
Copyright © 2020-2023  润新知