1. O (n log n) 시간에 O (1) 추가 공간 사용
예를 들면 다음과 같습니다.
- 먼저 내부 O (n log n) 정렬을 수행합니다.
- 그런 다음 목록을 한 번 살펴보고 목록의 시작 부분에 모든 백의 첫 번째 인스턴스를 작성하십시오.
ejel의 파트너가이 작업을 수행하는 가장 좋은 방법은 간단한 병합 단계를 사용하는 내부 병합 정렬이며, 예를 들어 질문의 의도 일 수 있다는 것이 옳다고 생각합니다. 입력을 개선 할 능력없이 가능한 한 효율적으로이를 수행하기 위해 새 라이브러리 함수를 작성하며, 입력의 종류에 따라 해시 테이블없이이를 수행하는 것이 유용한 경우가 있습니다. 그러나 나는 이것을 실제로 확인하지 않았습니다.
2. O (n) 시간에 O (lots) 추가 공간 사용
- 모든 정수를 담을 수있을만큼 충분히 큰 0 배열을 선언
- 어레이를 한 번 살펴보십시오.
- 각 정수에 대해 해당 배열 요소를 1로 설정하십시오.
- 이미 1이면 해당 정수를 건너 뜁니다.
이것은 몇 가지 의심스러운 가정이있는 경우에만 작동합니다.
- 저렴하게 메모리를 제로화하는 것이 가능하거나 int의 크기가 개수에 비해 작습니다.
- OS에 256 ^ sizepof (int) 메모리를 요청하시면됩니다.
- 거대하다면 정말 효율적으로 캐시합니다.
잘못된 대답이지만 입력 요소가 많지만 모두 8 비트 정수 (또는 16 비트 정수일 수도 있음) 인 경우 가장 좋은 방법이 될 수 있습니다.
3. O (작은)-같은 여분의 공간, O (n)-쉬운 시간
# 2로 해시 테이블을 사용합니다.
4. 명확한 방법
요소 수가 적 으면 다른 코드가 더 빨리 작성되고 더 빨리 읽을 수 있으면 적절한 알고리즘을 작성하는 것이 유용하지 않습니다.
예 : 모든 동일한 요소를 제거하는 각 고유 요소 (즉, 첫 번째 요소, 두 번째 요소 (제거 된 첫 번째 요소의 중복) 등)에 대한 배열을 살펴 봅니다. O (1) 추가 공간, O (n ^ 2) 시간.
예 : 이를 수행하는 라이브러리 함수를 사용하십시오. 효율성은 쉽게 사용할 수있는 항목에 따라 다릅니다.