设a数组中最大值减最小值加1为A,则f函数的时间复杂度为( )
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
boo1 f0(vector<int>& a, int m,int k) {
int s = 0;
for (int i=0,j=0;i< a.size();i++) {
while (a[i]- a[j]> m) j++;
s+= i-j;
}
return s >= k;
}
int f(vector<int>& a,int k) {
sort(a.begin(),a.end());
int g = 0;
int h = a.back()- a[0];
while (g <h){
intm=g+(h-g)/2;
if(f0(a,m,k)){
h=m;
}else {
g=m+1;
}
}
return g;
}
int main() {
int n, k;
cin >> n>> k;
vector<int> a(n,0);
for (int i=0;i<n;i++) {
cin >>a[i];
}
cout << f(a,k) << end1;
return 0;
}
O(nlogA)
O(n^2 logA)
O(nlog(nA)))
O(nlogn)