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

C++의 중복 II 포함


배열과 정수 k가 있다고 가정하고 nums[i] =nums[j]와 같은 두 개의 고유한 인덱스 i와 j가 배열에 있는지 확인해야 합니다. i와 j의 절대차는 기껏해야 k입니다.

따라서 입력이 [1,2,4,1]이고 k =3이면 출력은 True

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

  • 쌍의 배열 nn 정의

  • initialize i :=0의 경우 i − 숫자의 크기일 때 업데이트(i를 1만큼 증가), −

    • nn의 끝에 {nums[i], i} 삽입

  • 배열 nn 정렬

  • initialize i :=1의 경우 i 수행

    • nn[i]의 첫 번째 요소가 nn[i - 1]의 첫 번째 요소와 동일하고 |nn[i]의 두 번째 - nn[i - 1]|의 두 번째 요소와 같으면 -

      • true를 반환

  • 거짓 반환

예시

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

#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