Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

มี Duplicate II ใน C++


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