สมมติว่าเรามีอาร์เรย์และจำนวนเต็ม k เราต้องตรวจสอบว่ามีดัชนีที่แตกต่างกันสองตัว i และ j ในอาร์เรย์นั้น nums[i] =nums[j] และ ความแตกต่างที่แน่นอนระหว่าง i กับ j คือ k มากที่สุด
ดังนั้น หากอินพุตเป็น [1,2,4,1] และ k =3 ผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดอาร์เรย์ nn ของคู่
-
สำหรับการเริ่มต้น i :=0 เมื่อ i − ขนาดของ nums ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ −
-
ใส่ {nums[i], i} ต่อท้าย nn
-
-
เรียงลำดับอาร์เรย์ nn
-
สำหรับการเริ่มต้น i :=1 เมื่อฉัน <ขนาดของ nn ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
ถ้าองค์ประกอบแรกของ nn[i] เหมือนกับองค์ประกอบแรกของ nn[i - 1] และ |second of nn[i] - วินาทีของ nn[i - 1]| ดังนั้น −
-
คืนความจริง
-
-
-
คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
vector<pair<int, int> > nn;
for (<) {
nn.push_back(make_pair(nums[i], i));
}
sort(nn.begin(), nn.end());
for (int i = 1; i < nn.size(); i++) {
if (nn[i].first == nn[i - 1].first and abs(nn[i].second - nn[i - 1].second) <= k)
return true;
}
return false;
}
};
main(){
Solution ob;
vector<int> v = {1,2,4,1};
cout << (ob.containsNearbyDuplicate(v, 3));
} อินพุต
{1,2,4,1} ผลลัพธ์
1