Computer >> Máy Tính >  >> Lập trình >> C ++

Chứa bản sao II trong C ++


Giả sử chúng ta có một mảng và một số nguyên k, chúng ta phải kiểm tra xem có hai chỉ số i và j khác nhau trong mảng sao cho nums [i] =nums [j] và chênh lệch tuyệt đối giữa i và j tối đa là k.

Vì vậy, nếu đầu vào là [1,2,4,1] và k =3, thì đầu ra sẽ là True

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một mảng nn các cặp

  • để khởi tạo i:=0, khi i - kích thước của nums, cập nhật (tăng i lên 1), thực hiện -

    • chèn {nums [i], i} vào cuối nn

  • sắp xếp mảng nn

  • để khởi tạo i:=1, khi i

    • nếu phần tử đầu tiên của nn [i] giống với phần tử đầu tiên của nn [i - 1] và | phần tử thứ hai của nn [i] - phần tử thứ hai của nn [i - 1] |, thì -

      • trả về true

  • trả về false

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

{1,2,4,1}

Đầu ra

1