classSolution{public:intsmallestDistancePair(vector<int>&nums,intk){sort(begin(nums),end(nums));intl=0;intr=nums.back()-nums.front();while(l<r){constintm=(l+r)/2;if(pairDistancesNoGreaterThan(nums,m)>=k)r=m;elsel=m+1;}returnl;}private:intpairDistancesNoGreaterThan(constvector<int>&nums,intm){intcount=0;intj=1;// For each index i, find the first index j s.t. nums[j] > nums[i] + m,// So pairDistancesNoGreaterThan for index i will be j - i - 1for(inti=0;i<nums.size();++i){while(j<nums.size()&&nums[j]<=nums[i]+m)++j;count+=j-i-1;}returncount;}};
classSolution{publicintsmallestDistancePair(int[]nums,intk){Arrays.sort(nums);intl=0;intr=nums[nums.length-1]-nums[0];while(l<r){finalintm=(l+r)/2;if(pairDistancesNoGreaterThan(nums,m)>=k)r=m;elsel=m+1;}returnl;}privateintpairDistancesNoGreaterThan(int[]nums,intm){intcount=0;intj=1;// For each index i, find the first index j s.t. nums[j] > nums[i] + m,// So pairDistancesNoGreaterThan for index i will be j - i - 1for(inti=0;i<nums.length;++i){while(j<nums.length&&nums[j]<=nums[i]+m)++j;count+=j-i-1;}returncount;}}