สมมติว่าเรามีอาร์เรย์และจำนวนเต็ม 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