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


    题目描述

    统计一个数字在排序数组中出现的次数。
    思路:记住二分搜索的复杂度是O(logn),复杂度的计算方式是主定理。二分搜索模板要记得。
    这题要注意没有找到相关元素的返回情况,初始化的时候将两个位置初始化为-1,在最后判断以下,如果两个都是-1就是没有找到位置,这个时候就返回0,如果找到了就pos2 - pos1 + 1.
     
    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            if(data.size() == 0){
                return 0;
            }
            int start = 0,end = data.size() - 1;
            int mid = start + (end - start) / 2;
            int pos1 = -1,pos2 = -1;
            int flag = false;
            while(start + 1 < end){
                mid = start + (end - start) / 2;
                if(data[mid] == k){
                    end = mid;
                }
                else if(data[mid] < k){
                    start = mid;
                }
                else{
                    end = mid;
                }            
            }
            if(data[start] == k){
                pos1 = start;
            }
            else if(data[end] == k){
                pos1 = end;
            }
            start = 0,end = data.size() - 1;
            while(start + 1 < end){
                mid = start + (end - start) / 2;
                if(data[mid] == k){
                    start = mid;
                }
                else if(data[mid] < k){
                    start = mid;
                }
                else{
                    end = mid;
                }            
            }
            if(data[end] == k){
                pos2 = end;
            }
            else if(data[start] == k){
                pos2 = start;
            }
            int cnt = 0;
            if(pos2 != -1 && pos1 != -1){//判断是否找到该元素
                cnt = pos2 - pos1 + 1;
            }            
            return cnt;
        }
    };
  • 相关阅读:
    scanf与scanf_s的区别
    PAT 1041 考试座位号
    PAT1018 锤子剪刀布
    Cookie
    JSP--原理
    多线程练习题
    Java线程--线程的同步与锁
    有关toString()和println(Object)
    Java Web请求和响应机制
    IO流
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8195743.html
Copyright © 2020-2023  润新知