2013-03-20 2 views
0

나는이 문제를 해결하기 위해 내 두뇌를 감싸고있는 것처럼 보일 수는 없지만 다른 요소가있는 배열이 있다고 가정 해 보겠습니다. 첫 번째 배열의 고유 요소만으로 다른 배열을 만들고 싶다면 Map, HashSets 등을 사용하지 않고 (java에서 다른 것을 가져 오지 않고) 어떻게 할 것인가?Java : 배열의 고유 항목

+0

당신은 객체가 * 유일한 * 경우 알 수있는 방법이 필요하므로 객체가 될 경우 *이 개체 #의 equals' 또는 주문에'java.util.Comparator''에 대한 신뢰 *를 확인할 수 있습니다 inserted가 이미 배열에 있습니다. –

+0

정렬 방식을 직접 작성하고 루프를 반복합니까? java.util.Arrays를 가져올 수있는 경우 배열을 정렬하고 반복하여 중복을 제거 할 수 있습니다. – nhahtdh

+2

배열을 정렬하고 반복하여 단일 루프에서 새 배열을 채울 수 있습니다. 복잡성 :'O (N * logN)'. – harpun

답변

3

간단한 무차별 대입 알고리즘.
배열을 두 번 반복하면 요소가 반복되는지 확인하십시오. 배열에 추가하지 않고 계속하십시오. O(N^2) 복잡도 대신 O(N) 복잡도를 사용하여 Map 또는 Set

+2

O (N)은'HashMap'을 통해서만 얻을 수 있습니다. 'TreeMap'을 가진 O (Nlog N) – nhahtdh

+0

@nhahtdh'O (N)'은'Map'을 사용합니까? 나는 그것이 'O (1)'이긴하지만. –

+0

@LuiggiMendoza : N은 배열의 N 요소를 나타냅니다. HashMap (add)에 대한 연산은 O (1) 상각됩니다. – nhahtdh

0

Cratylus의 답변 - 또는 더 나은 설명은 harpun의 의견을 참조하십시오. O (n) 복잡도가 인 솔루션의 경우 "의사 코드"일뿐입니다.


foreach element1 in array: 
    duplicate = false 
    foreach element2 in array: 
     if element 1 == element 2: 
      duplicate = true 
      break // out of inner loop 
    if duplicate: 
     // duplicate 
    else: 
     // not duplicate 

물론이보다 깨끗하게 약간 더 높은 수준으로 발현 될 수있다. "포함"의 정의가 분명해야합니다.

foreach element in array: 
    if contains(array, element): 
     // duplicate