Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 배열의 K-diff 쌍


배열과 정수 k가 있다고 가정하고 배열에서 고유한 k-diff 쌍의 수를 찾아야 합니다. 여기서 k-diff 쌍은 (i, j)와 같습니다. 여기서 i와 j는 모두 배열에 존재하고 절대 차이는 k입니다.

따라서 입력이 [3,1,4,1,5], k =2와 같으면 배열과 같은 (1,3) 및 ( 3,5).

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 보고 완료라고 하는 지도 정의

  • 한 세트 정의

  • k <0이면 -

    • 0 반환

  • initialize i :=0의 경우, i

    • (보이는[nums[i]] 1씩 증가)

    • s

      에 숫자[i]를 삽입합니다.
  • 답변 :=0

  • s에 있는 각 요소에 대해 다음을 수행합니다. -

    • k가 0과 같으면 -

      • 본 경우[it]> 1이면 -

        • (1만큼 증가)

    • 그렇지 않으면

      • 완료[it] 1 증가

      • (it + k)가 표시되지만 완료되지 않은 경우 -

        • (1만큼 증가)

      • (it - k)가 표시되지만 완료되지 않은 경우 -

        • (1만큼 증가)

  • 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h&g;
using namespace std;
class Solution {
public:
   int findPairs(vector<int>& nums, int k) {
      map<int, int> seen, done;
      set<int> s;
      if (k < 0)
         return 0;
      for (int i = 0; i < nums.size(); i++) {
         seen[nums[i]]++;
         s.insert(nums[i]);
      }
      int ans = 0;
      for (auto it = s.begin(); it != s.end(); it++) {
         if (k == 0) {
            if (seen[*it] > 1)
            ans++;
         }
         else {
            done[*it]++;
            if (seen.find(*it + k) != seen.end() && done.find(*it + k) == done.end())
               ans++;
            if (seen.find(*it - k) != seen.end() && done.find(*it - k) == done.end())
               ans++;
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,1,4,1,5};
   cout << (ob.findPairs(v, 2));
}

입력

{3,1,4,1,5}, 2

출력

2