मान लीजिए हमारे पास एक पूर्णांक सरणी है; हमें सभी युग्मों में kth सबसे छोटी दूरी ज्ञात करनी है। एक जोड़ी (ए, बी) की दूरी वास्तव में ए और बी के बीच पूर्ण अंतर है। इसलिए यदि इनपुट [1,3,8] जैसा है, तो सभी संभावित जोड़े [1,3], [3, 8] हैं। , [1, 8], तब जब k =2, दूसरी सबसे छोटी दूरी 5 (8 - 3) होती है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n :=अंकों का आकार, x :=0
- इनिशियलाइज़ i :=0 के लिए, जब i
करें - x :=अधिकतम x और अंक[i]
- करें
- यदि cnt[i]>=k, तो −
- वापसी मैं
- k :=k - cnt[i]
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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