কম্পিউটার

C++ এ K-তম সবচেয়ে ছোট জোড়া দূরত্ব খুঁজুন


ধরুন আমাদের একটি পূর্ণসংখ্যা অ্যারে আছে; আমাদের সব জোড়ার মধ্যে kth ক্ষুদ্রতম দূরত্ব খুঁজে বের করতে হবে। একটি জোড়ার দূরত্ব (A, B) আসলে A এবং B এর মধ্যে পরম পার্থক্য। তাই যদি ইনপুটটি [1,3,8] এর মত হয়, তাহলে সম্ভাব্য সব জোড়া হল [1,3], [3, 8] , [1, 8], তারপর যখন k =2, দ্বিতীয় ক্ষুদ্রতম দূরত্ব হল 5 (8 - 3)।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • n :=সংখ্যার আকার, x :=0
  • আরম্ভ করার জন্য i :=0, যখন i করুন
  • x :=সর্বাধিক x এবং সংখ্যা[i]
  • x + 1 আকারের একটি অ্যারে cnt সংজ্ঞায়িত করুন
  • আরম্ভ করার জন্য i :=0, যখন i করুন j শুরু করার জন্য
  • :=i + 1, যখন j করুন
  • cnt[|nums[j] - nums[i]|] 1 দ্বারা বাড়ান
  • আরম্ভ করার জন্য i :=0, যখন i <=x, আপডেট করুন (i 1 দ্বারা বৃদ্ধি করুন), −
      করুন
    • যদি 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 (BST-তে অর্ডার পরিসংখ্যান) k-তম ক্ষুদ্রতম উপাদান খুঁজুন

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

    3. সবচেয়ে ছোট সংখ্যা K খুঁজুন যেমন K % p =0 এবং q % K =0 C++ এ

    4. C++ এ একটি অ্যারেতে ক্ষুদ্রতম মানের ফ্রিকোয়েন্সি খুঁজুন