কম্পিউটার টিউটোরিয়াল

সি++-এ K-তম ক্ষুদ্রতম জোড়া দূরত্ব (Find K-th Smallest Pair Distance)

মনে করুন, একটি পূর্ণসংখ্যা অ্যারে আছে। আমাদের সকল সম্ভাব্য জোড়ার মধ্যে k-তম ক্ষুদ্রতম দূরত্ব বের করতে হবে। একটি জোড়া (A, B)-এর দূরত্ব হচ্ছে |A - B|।

যেমন, ইনপুট [1,3,8] হলে, সকল জোড়া হলো [1,3], [3,8], [1,8]। k = 2 হলে, দ্বিতীয় ক্ষুদ্রতম দূরত্ব হলো ৫ (8 - 3)।

সমাধানের ধাপসমূহ

  • n := nums.size(), x := 0
  • সর্বোচ্চ উপাদান বের করুন (x)
  • x+1 আকারের cnt অ্যারে সংজ্ঞায়িত করুন
  • সকল জোড়া (i, j) এর জন্য cnt[|nums[j] - nums[i]|]++
  • i := 0 থেকে x পর্যন্ত
    • যদি cnt[i] >= k হয়, i রিটার্ন করুন
    • k := k - cnt[i]
  • x রিটার্ন করুন

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution { public:    int smallestDistancePair(vector<int>& nums, int k) {       int n = nums.size();       int x = 0;       for(int i = 0; i < n; i++)x = max(x, nums[i]);       vector <int> cnt(x + 1);       for(int i = 0 ; i < n; i++){          for(int j = i + 1; j < n; j++){             cnt[abs(nums[j] - nums[i])]++;          }       }       for(int i = 0; i <= x; i++){          if(cnt[i] >= k)return i;          k -= cnt[i];       }       return x;    } }; main(){    Solution ob;    vector<int> v = {1,3,8};    cout << (ob.smallestDistancePair(v, 2)); }

ইনপুট

{1,3,8}

আউটপুট

5
  1. C++-এ BST-তে K-তম ক্ষুদ্রতম উপাদান খুঁজে বের করা (Order Statistics)

  2. C++-এ থ্রেশহোল্ড দূরত্বে সবচেয়ে কম প্রতিবেশী город খুঁজে বের করা

  3. সর্বনিম্ন সংখ্যা K খুঁজে বের করা যাতে K % p = 0 এবং q % K = 0 C++-তে

  4. সি++ প্রোগ্রাম: অ্যারেতে সর্বনিম্ন মানের ফ্রিকোয়েন্সি (Frequency) নির্ণয়