K наименьшая пара расстояние LEETCODE ПРОБЛЕМА - PullRequest
0 голосов
/ 14 апреля 2020

Я решал эту сложную задачу, связанную с leetcode

Учитывая массив целых чисел, вернуть k-е наименьшее расстояние среди всех пар. Расстояние пары (A, B) определяется как абсолютная разница между A и B.

Входные данные: nums = [1,3,1] k = 1 Выходные данные: 0 Объяснение: Здесь приведены все пары: (1,3) -> 2 (1,1) -> 0 (3,1) -> 2 Тогда 1-я наименьшая пара расстояний равна (1,1), а ее расстояние равно 0.

Я попытался выполнить бинарный поиск, но только в 13 случаях из 19 произошел сбой в тесте ниже: [38,33,57,65,13,2,86,75,4,56] 26

output : 35 Ожидается: 36

class Solution {

    int check(vector<int>nums,int mid)
    {
        int j=0;
        int count=0;
        for(int i=0;i<nums.size();i++)
        {
            while(j<nums.size() &&  i<=j && nums[j]-nums[i]<=mid  )
            {
                count+= j - i;
                cout<< count<<" "<<j<<" "<<i<< endl;
                j++;
            }
        }
//        cout<<"count"<<" "<<count<<endl;
        return count;

    }



    public:
     int smallestDistancePair(vector<int>&nums, int k) {
            sort(nums.begin(),nums.end());
         int s=0;
         int e=nums[nums.size()-1]-nums[0];
             int ans=0;
         while(s<=e)
         {
             int mid= (s+e)/2;

             ans=mid;
//             cout<<s<<" "<<e<<" " <<ans<<endl;
             int v=check(nums,mid);
             if(v >=k)
             {
                 e=mid-1;
             }
             else{
                 s=mid+1;
             }

         }
         return ans;


    }
};
...