당신은 요소의 배열이 주어집니다. 일부 또는 전부가 복제본입니다. 그들을 0 (n) 시간과 0 (1) 공간에서 찾으십시오. 입력 속성 - 숫자는 1..n의 범위에 있으며 여기서 n은 배열의 한도입니다.중복 찾기
중복 찾기
답변
O (1) 저장 장치가 추가 메모리에 대한 제한 사항이고 입력 배열을 수정할 수 없다는 표시가 아니라면 요소를 반복하면서 정렬하여 정렬 할 수 있습니다. 각 배치 된 요소를 그것의 "정확한"장소 - 이미 올바른 번호로 점령 된 경우 중복으로 인쇄하십시오. 그렇지 않으면 "부정확 한"기존 내용을 가져 와서 반복하기 전에 올바르게 배치하십시오. 이것은 차례로 공간을 만들기 위해 다른 요소를 수정해야 할 수도 있지만 최대 1의 스택이 있고 보정 단계의 총 수가 N으로 제한되어 N 단계 반복에 추가되어 2N이 여전히 O (N)입니다.
좀 더 살살해야합니다. 가까이 있지만 O (n)으로 볼 수는 없습니다. 요소별로 배열 요소를 반복한다고 가정 할 때 _chain_ 값의 배치를 보장하는 O (1) 연산은 무엇입니까? 다시 말해서, a [3] = 12이고 스왑을 다시해야하기 때문에 a [3] = 7'과'a [7] = 12' 두 값을 서로 바꿀 수 없습니다. – paxdiablo
나는 다른 변수를 임시 변수에 저장해야한다고 생각한다. 그런 다음 같은 접근법을 계속한다. –
@ paxdiablo : 내 충실한 답변에서 언급했듯이, 그러한 수정 사슬의 총 길이는 전체 프로세스에서 <= N이어야합니다. 예를 들어 첫 번째 요소를 배치하는 것과 관련된 수정 사슬이 수정되어야 할 모든 요소를 필요로한다면, 다른 요소들은 그 자리에 있으며, 단지 확증적인 반복이 남아 있습니다. 그래서 N^2가 캐주얼 한 것처럼 보일 때 2N과 비슷합니다. –
배열 및의 요소 개수가 모두 n
을 기준으로 가변적이므로이 작업을 수행 할 수 있다고 생각하지 않습니다. 내가 믿는, 그리고 내가 잘못 될 수있다처럼 볼 토니의 대답 :-) 다시 본다 : I 는 개인적으로 나는 그것을 의심하지 않지만, 나는 :-)
편집하기 전에 잘못 봤는데, 잘못 될 수있다 그는 그것을 못 박았을 수도 있습니다. 충분한 사람들이 나에 동의하면 나는이 대답을 삭제됩니다 또는 범위 이 (예를 들어,
1..m
)에 고정 된 경우가
:-) 너무 많이을 downvoted됩니다, 당신은, 따라서 그것을 할 수 :
dim quant[1..m]
for i in 1..m:
quant[m] = 0
for i in 1..size(array):
quant[array[i]] = quant[array[i]] + 1
for i in 1..m:
if quant[i] > 1:
print "Duplicate value: " + i
대부분의 알고리즘에서 시간과 공간을 자주 교환 할 수 있기 때문에 효과가 있습니다. 그러나 범위는 입력 값에 따라 달라지기 때문에 시간과 공간 사이의 일반적인 상충 관계는 그럴싸하지 않습니다.
다시 중복을 찾는 데 여분의 공간을 사용하고 있습니다. 배열 작업에서 하나의 요소를 사용하는 대신 각 요소에 대해 하나의 비트를 사용하여 공간 최적화를 수행하는 대신 최적화 할 수 있습니다. –
@prp의 경우, 여분의 저장 공간은 입력 값에 의존하지 않고 상수'm'을 사용하므로 저장 조건에 아무런 영향을 미치지 않으므로 O (1)입니다. 그러나 'n'에 의존하는 질문 _의 범위 이후로는 논리적이지 않습니다. – paxdiablo
당신의 솔루션은 m에 의존합니다. 나는 m에 의존하지 않고 일정한 공간으로 해결하려고 노력할 것입니다. –
- 1. 중복 파티션을 사용하여 중복 찾기
- 2. 중복 찾기 및 표시
- 3. 배열에서 중복 찾기
- 4. 중복 배열 요소 찾기
- 5. 찾기 절단 가능한 중복
- 6. MySQL - 중복 된 튜플 찾기
- 7. ArrayList의 중복 값 인덱스 찾기
- 8. Perl File :: 중복 이름 찾기
- 9. SQL - 중복 된 항목 찾기
- 10. 다중 열 중복 찾기 mysql
- 11. 다른 테이블에 중복 삽입 찾기
- 12. 경계가있는 정수 배열에서 중복 찾기
- 13. LINQ를 사용하여 중복 찾기/삭제
- 14. PHP IP 범위 중복 찾기
- 15. 중복 된 사용자 함수 찾기
- 16. java arraylist에서 중복 객체 찾기
- 17. 각 타임 스탬프에 대해 중복 ID 찾기
- 18. 애플 리케이션 엔진 데이터 스토어에서 중복 찾기
- 19. MS 액세스 사용 중복 찾기 및 삭제
- 20. 지도를 사용하여 중복 찾기 mongodb에서 축소
- 21. 파이썬에서 하위 목록 중복 찾기 (계속)
- 22. 비트 마스크를 기반으로 MySQL에서 중복 레코드 찾기
- 23. 중복 된 iPhone 응용 프로그램 찾기
- 24. MS 액세스에서 중복 데이터가있는 행 찾기
- 25. 텍스트 편집기에서 찾기 및 바꾸기를 사용하여 중복 값 삭제
- 26. 레일 (또는 SQL) : 중복 AR 개체 찾기 및 삭제
- 27. sharepoint DateRangesOverlap - 날짜 범위에 대해 중복 항목 찾기
- 28. 행이 서로 동일 할 수있는 텍스트 파일에서 행 중복 찾기
- 29. observablecollection에서 중복 된 데이터 필터링 및 찾기 WPF
- 30. T-SQL을 사용하여 대략 중복 된 데이터베이스 레코드 찾기?
어떻게 상수 공간에서 복제본을 열거 할 수 있습니까? –
이것은 objective-c와 어떤 관련이 있습니까? 당신이 생각해내는 대답이 거의 모든 언어에서 작동 할 것 같습니다. –
인터뷰에서 같은 질문을 한 적이 있습니다. 먼저 해시 테이블 (복잡성 O (n))에 요소를 넣은 다음 O (1)에서 요소를 찾아야합니다. – nacho4d