2013-09-08 4 views
1

사용자별로 두 개의 배열이 제공되었습니다. 내 코드는 왼쪽이나 오른쪽으로 얼마나 많은 회전을했는지 찾아야한다. 요소가 반복되지 않는다고 안전하게 가정 할 수 있습니다.순환 순서에서 회전 수 찾기

I/P :

어레이 (arr1) 2, 6, 4, 10, 8, 12, 11

회전 배열 (arr2) 4, 10, 8, 12, 11, 2, 6

O/P : 2

방법 항목 :

이 문제에 대한 나의 접근 방식은 다음과 같이 될 것이다 :

1. 회전 된 배열에서 첫 번째 요소를 가져 와서 회전 된 배열에서 마지막 요소를 가져옵니다. "first"와 "last"로 각각 이름을 지어 라. 또한 카운트를 0으로 초기화합니다.

2. arr1의 숫자 "first"에 도달 할 때까지 "first"와 "arr1"의 요소를 처음부터 비교를 시작합니다. 동시에 arr1의 요소와 "last"를 끝에서부터 비교를 시작하고 arr1에서 "last"에 해당하는 숫자가 될 때까지 계속 감소시킵니다.

3. 위의 2 단계에서 위의 단계 2와 동일한 for 루프에서 증가분과 감소분을 계산할 수 있습니다. 또한 count 변수를 증가시킵니다.

3. "첫 번째"또는 "마지막"중 어느 것이 든 동등한 것으로 밝혀지면 카운트를 중단하고 인쇄합니다.

방법 2 :

이 arr2의 첫 번째 요소를 가지고 끝에서 arr1 요소와 비교 시작하고 우리가 일치를 찾을 때까지 그것을 할. 우리가 arr1을 감소시킨 횟수는 회전 수와 같습니다.

위의 두 가지 방법 중 더 나은 방법이 있습니까?

+0

숫자가 반복되면 어떻게됩니까? – haccks

+0

처음에는 홍당무, 나는 각 배열에 대한 인덱스를 유지하고 각 배열의 시작 부분에 둘 다 시작합니다. (두 번째 배열이 0 위치로 이동했을 가능성이 있으므로 그 점을 확인하는 것이 좋습니다.) 그런 다음 각 인덱스의 각 요소를 비교하여 배열의 길이만큼 이동하는 루프를 설정합니다. 루프가 끝나기 전에 불일치가 발생하면 두 번째 인덱스 만 증가시키고 루프를 시작하십시오. 루프에서 비교할 때, "랩 어라운드 (wrap around)"비교를 수행하십시오 (10 요소 배열에서 요소 '11'에있는 경우 첫 번째 요소로 래핑됩니다). – lurker

+2

첫 번째 배열의 크기를 두 배로 복제하십시오. 루프를 반복하고 '4'를 찾을 때마다 다음 'n-1'요소를 비교하여 일치시킵니다. '4 '를 찾으려면 몇 단계를 저장해야하는지 저장하십시오. 중복이 없다는 것을 안다면 '4'를 발견했을 때 멈추십시오. 복제 대신 랩핑하면 약간 더 복잡한 코드에서 동일한 결과를 얻습니다. –

답변

0

"요소가 반복되지 않는다고 안전하게 생각할 수있는 경우"의 첫 번째 요소를 찾을 때까지 arr1 요소를 단계적으로 수행하는 것보다 더 좋은 방법은 없습니다. arr2 요소를 발견했습니다. 당신이해야하는 단계의 수는 당신의 왼쪽 로테이션입니다. 어느 한 배열의 길이에서 왼쪽 회전을 빼고 1을 빼서 오른쪽 회전을 계산할 수 있습니다.

+0

중복 된 경우에도 @Paul Griffiths가 도움이 될 것입니다. – krrishna

관련 문제