zoukankan      html  css  js  c++  java
  • 剑指offer 数字在排序数组中出现的次数

    题目描述

    统计一个数字在排序数组中出现的次数。
     
    思路:这题有两个点可以想到使用二分法,
    1)排序的数组;
    2)暴力求解的复杂度是O(n),要想优化只有二分法的logn级别。
     
    和使用二分法找到某个数出现的区间一样,只不过要多一个变量判断是否找到这个数,因为如果不存在这个数那么两次二分法找到的位置和元素只有一个出现最后一个位置的答案是一样的,所以要多用一个变量进行判断。
    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;
            bool firstFindIt = true;
            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;
                }
            }
            int firstPos = 0;
            if(data[start] == k){
                firstPos = start;
            }
            else if(data[end] == k){
                firstPos = end;
            }
            else{
                firstFindIt = false;
            }
            
            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;
                }
                
            }
            int lastPos = 0;
            bool lastFindIt = true;
            if(data[end] == k){
                lastPos = end;            
            }
            else if(data[start] == k){
                lastPos = start;
            }
            else{
                lastFindIt = false;
            }
            if(firstFindIt == true && lastFindIt == true){
                return lastPos - firstPos + 1;
            }
                    
            return 0;
            
        }
    };
  • 相关阅读:
    struts2文件上传大小限制问题
    kindeditor使用方法
    ajaxFileUpload SyntaxError: syntax error
    Attempted to lock an already-locked dir异常解决方法
    Simditor图片上传
    心理学
    Vue.JS
    SQL Server 日常维护经典应用
    12 个 JS 技巧
    Linq to js
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7493431.html
Copyright © 2011-2022 走看看