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

Contains Duplicate II ใน C++

แนวคิด

สมมติว่ามีอาร์เรย์และจำนวนเต็ม k ให้ตรวจสอบว่ามีดัชนี i และ j ที่แตกต่างกันในอาร์เรย์ที่ทำให้ nums[i] = nums[j] และความต่างสัมบูรณ์ระหว่าง i และ j น้อยกว่าหรือเท่ากับ k หรือไม่

เช่น ถ้าอินพุตคือ [1,2,4,1] และ k = 3 ผลลัพธ์คือ True

วิธีแก้:

  • กำหนดอาร์เรย์ nn ของคู่
  • วนลูป i := 0 ถึงขนาด nums - 1: แทรก {nums[i], i} ลงท้าย nn
  • เรียงอาร์เรย์ nn
  • วนลูป i := 1 ถึงขนาด nn - 1: ถ้าองค์ประกอบแรกของ nn[i] เท่ากับองค์ประกอบแรกของ nn[i-1] และ |second of nn[i] - second of nn[i-1]|: คืนค่า true
  • คืนค่า false

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        vector<pair<int, int>> nn;
        for (int i = 0; i < nums.size(); i++) {
            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