2014-11-12 1 views
-1

0과 10000 사이의 정수로 구성된 N 요소의 정수 배열이 있다고 가정 해 보겠습니다. 숫자를 두 자 이상 포함하는 숫자를 두 번 이상 감지해야합니다 (예 : 1245가 유효하고 1214가 유효하지 않음). 우리는 이것을 어떻게 최적으로 할 수 있습니까? 감사!정수에서 중복 자릿수 찾기

+0

최적의 방법은 전체 어레이를 스캔하고 어레이의 각 요소를 스캔하는 것입니다. 당신의 생각은 어떠 했습니까? –

+0

모든 정수를 검사 할 필요가 있기 때문에 전체 어레이를 스캔해야한다고 생각합니다. 그러나 실제 문제는 각 정수에서 중복 된 정수를 효과적으로 감지하는 방법이라고 생각합니다. –

+0

그리고 각 자릿수를 보지 않고 어떻게 할 것을 제안합니까? –

답변

0

두 개의 루프가 필요합니다. 루프의 각 요소는 배열의 각 요소를 검사합니다.

내부 루프에서는 지정한 기준에 따라 요소가 유효한지 여부를 결정합니다. 숫자에 동일한 숫자가 두 번 이상 있는지 확인하려면 각 숫자를 하나씩 효과적으로 추출하는 루틴이 필요합니다. 가장 좋은 방법은 숫자에 대해 "mod 10"을 수행 한 다음 원래 숫자를 10으로 나눈 것을 반복하는 것입니다. 숫자가 남아 있지 않을 때까지 계속 수행하십시오. 이제 정수의 각 자릿수를 살펴 보는 루틴을 가졌으므로 중복 자릿수가 있는지 확인하는 방법은 가장 효율적으로 10 개의 부울 배열을 만드는 것입니다. 해제 된 배열로 시작하십시오. 모든 자릿수에 대해 bool 배열의 인덱스로 사용하고 true로 설정하십시오. 설정하기 전에 해당 지점에서 "true"가 다시 표시되면 bool 배열의 요소가 이전에 방문되었음을 의미하므로 중복 된 숫자입니다. 그래서 당신은 루프에서 벗어나 잘못된 값을 발견했다고 말합니다.