数字在排序数组中出现的次数
Posted 泡面小王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字在排序数组中出现的次数相关的知识,希望对你有一定的参考价值。
统计一个数字在排序数组中出现的次数。
思路:“排序数组”,需要找数,则使用二分查找。
//非递归实现二分查找(第一个k出现的位置) int getFirstK(vector<int>&data,int k) { int len=data.size(); int start=0; int end=len-1; while(start<=end) { int mid=(start+end)/2; if(data[mid]>k) end=mid-1; else if(data[mid]<k) start=mid+1; else {//如果中间的数字的前面一个数字不是k,此时这个数字刚好就是第一个k if(mid>0&&data[mid-1]!=k||mid==0) return mid; else end=mid-1; } } return -1; } //非递归实现二分查找(最后一个k出现的位置) int getLastK(vector<int>&data,int k) { int len=data.size(); int start=0; int end=len-1; while(start<=end) { int mid=(start+end)/2; if(data[mid]>k) end=mid-1; else if(data[mid]<k) start=mid+1; else {//同理,中间数是k,往后查找下一个数不是k,则这个数刚好是最后一个k if(mid<len-1&&data[mid+1]!=k||mid==len-1) return mid; else start=mid+1; } } return -1; } int GetNumberOfK(vector<int> data ,int k) { if(data.size()==0) return 0; int firstK=getFirstK(data,k); int lastK=getLastK(data,k); if(firstK==-1||lastK==-1) return 0; return lastK-firstK+1; }
以上是关于数字在排序数组中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章