2013-08-04 3 views
2

1에서 100까지의 숫자 배열이 있습니다. 두 개의 숫자가 없습니다. O (n) 시간과 O (1) 공간을 사용하여 두 숫자를 찾습니다. 배열의 숫자가 정렬되지 않았다는 사실을 알았습니다. 예 : 있으라 3 5. 가정하면된다 누락시피 [ 2 누락 1, 누락 4] 배열, 즉 5 개의 번호 1 내지 번호 어레이 누락. 사실, 그것은 3과 5 없이는 [4, 1, 2]입니다.O (n) 시간과 O (1) 공간을 사용하여 배열에서 누락 된 숫자 찾기

그래서 이것을 해결하는 방법을 모르겠습니다. 누군가 당신을 도울 수 있습니까? 내 프로그래밍 언어는 C++이다. 배열은 다음과 같습니다.

{24, 44, 19, 92, 1 18, 28, 50, 88, 5 52,11,76,39,82,85,65,93,98, 4, 72, 94, 45, 59, 48, 46, 47, 67, 87,99,14,70802520222141777321336678910,11,12,13, 27, 81, 29, 62, 8, 35, 32, 49, 10, 100, 90, 78, 30, 34, 51, 9, 43, 58, 26, 33, 64, 15, 17, 57, 12, 56, 61, 79, 75, 97, 84, 42, 55, 83, 91, 86, 38, 89,96,74, 23,7,68,60,16,66,69,53, i이 벡터의 필드 push_back(i) 다른 경우 37, 63, 54, 95}

+0

지금까지 해보신 것은 무엇입니까? 정직한 시도를 이미 한 경우 코드를 게시하고 문제가있는 부분을 지적하십시오. 아무 것도 시도하지 않은 경우이 질문은 주제와 관련이 없으므로 도움을 요청하기 전에 문제를 직접 해결해야합니다. –

+0

무엇이 질문입니까? –

답변

-1

정렬 배열은, 당신은 모든 단계에서 증가 카운터 i 비교, 배열 필드를 반복.

+12

정렬은 O (n)이 아닙니다. – Oberon

+2

오베론 (Oberon)의 의견을 전치고 싶었지만 줄 화살표가 부족했습니다. – Borgleader

+0

@Oberon : 범위 [1 .. _n_]이 배열'A [n]'의 필드 수와 일치하는 것으로 알려져 있기 때문에 스왑을 사용한 시간 복잡도는 O (_n_)를 초과하지 않습니다. for (int i = 1, i = n, i ++) {while (A [A-1] -1) = A [i-1]) {swap (A [A [i-1] -1), A [i-1]); }}' –

관련 문제