• 统计数字在排序数组中出现的次数


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

    【思路】首先要清楚这种看似简单的题目,使用直接遍历是可以,但一般不得分,由于题目给出了排序数组,对于排序数组来说,常用的搜索查找方式为二分查找(binary search)。这里有个巧妙的方法,我们并不是去搜索k这个数,而是去搜索k-0.5和k+0.5这两个小数,进而返回待插入的位置!

    比如:1 2 2 2 3 4 且k = 2
    则,k+0.5会返回3的索引即4,而k-0.5会返回第一个2的索引即1,两者相减得3,即为最后的结果!二分代码如下,只返回begin位置!

    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            return biSearch(data, k+0.5) - biSearch(data, k-0.5);
        }
    private:
        int biSearch(vector<int>& data, double num){
            int begin = 0, end = data.size() - 1;
            while(begin <= end){
                int mid = begin + (end - begin) / 2;
                if(data[mid] < num)
                    begin = mid + 1;
                else if(data[mid] > num)
                    end = mid - 1;
            }
            return begin;
        }
    };

    另外一个思路直接使用STL中的库函数equal_range来获取与某一个值相等的上下边界,十分好用的!

    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            auto res = equal_range(data.begin(), data.end(), k);
            return res.second - res.first;
        }
    };
  • 相关阅读:
    #leetcode687.最长同值路径
    #leetcode404.所有左叶子节点之和
    #leetcode111.二叉树的最小深度
    #leetcode101.对称二叉树
    #leetcode437.路径总和II
    #leetcode112.路径总和
    #leetcode543.二叉树的直径
    #leetcode110.平衡二叉树
    springboot数据库密码加密-使用自定义加密算法
    PHP加密
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11385845.html
Copyright © 2020-2023  润新知