मान लीजिए हमारे पास एक पूर्णांक सरणी है; हमें सभी युग्मों में 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