思路:两次二分查找。。第一次寻找该数字第一次出现的位置,第二次查找该数字最后一次出现的位置 做差并加1;
#include<iostream> #include<algorithm> using namespace std; int arr[1003]; int main() { int n,k; cin>>n>>k;//n个数,查找k出现的次数 for(int i=0;i<n;i++){ cin>>arr[i]; } sort(arr,arr+n); int low=0; int high=n-1,mid; while(low<=high){ mid=(high-low)/2+low; if(arr[mid]>k) high=mid; else if(arr[mid]<k) low=mid; else { if(arr[mid-1]==k&&mid>=0) high=mid; else break; } } low=0,high=n-1; int mid1; while(low<=high){ mid1=(high-low)/2+low; if(arr[mid1]>k) high=mid1; else if(arr[mid1]<k) low=mid1; else { if(arr[mid1+1]==k&&mid1<n-1) low=mid1; else break; } } cout<<mid1-mid+1<<endl; return 0; }