สมมติว่าเรามีอาร์เรย์จำนวนเต็ม เราต้องหาระยะทางที่เล็กที่สุดที่ k ในบรรดาคู่ทั้งหมด ระยะห่างของคู่ (A, B) เป็นความแตกต่างที่แน่นอนระหว่าง A และ B ดังนั้นหากอินพุตเป็น [1,3,8] คู่ที่เป็นไปได้ทั้งหมดคือ [1,3], [3, 8] , [1, 8] ดังนั้นเมื่อ k =2 ระยะทางที่เล็กที่สุดเป็นอันดับสองคือ 5 (8 - 3)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- n :=ขนาดของ nums, x :=0
- สำหรับการเริ่มต้น i :=0 เมื่อฉัน
- x :=สูงสุดของ x และ nums[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