정수 배열이 제공됩니다. 배열에 동일한 요소가 여러 번 있습니다. 여기서 작업은 배열의 동일한 두 요소 사이의 최대 거리를 찾는 것입니다. 왼쪽에서 시작하여 배열에서 각 요소를 선택합니다. 그런 다음 동일한 숫자의 마지막 항목을 찾고 인덱스 간의 차이를 저장합니다. 이제 이 차이가 최대이면 반환합니다.
입력
Arr[] = { 1,2,4,1,3,4,2,5,6,5 }
출력 −배열에서 동일한 요소의 두 발생 사이의 최대 거리 − 4
설명 − 인덱스가 있는 반복되는 숫자 −
1. 1, first index 0, last index 3 distance=3-0-1=2 2. 2, first index 1, last index 6 distance=6-1-1=4 3. 5, first index 7, last index 9 distance=9-7-1=1 Maximum distance between two occurrences of same element : 4
입력
Arr[] = { 10,20,1,10,10,21,12,0 }
출력 −배열에서 동일한 요소의 두 발생 사이의 최대 거리 − 3
설명 − 인덱스가 있는 반복되는 숫자 −
1. 10 first index 0, last index 4 distance=4-0-1=3 Maximum distance between two occurrences of same element : 3
참고 - 입력 배열에 반복되는 숫자가 없으면 -1을 반환합니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
반복되는 숫자를 갖는 정수 배열을 Arr[]
로 취합니다. -
maxDistance( int arr[],int n) 함수는 동일한 요소의 두 발생 사이의 최대 거리를 계산하는 데 사용됩니다.
-
변수 maxD를 -1로 초기화합니다.
-
for 루프 내에서 처음부터 정수 배열을 탐색합니다.
-
중첩 for 루프에서 나머지 요소를 탐색하고 반복이 있는 경우 검색합니다. ( if ( arr[i] ==arr[j] ).
-
참이면 인덱스를 빼서 숫자 간의 차이를 계산합니다. ( temp=j-i-1)
-
이 값이 지금까지 발견된 최대값이면 maxD에 저장
-
전체 배열을 순회한 후 maxD를 반환합니다.
예시
#include <stdio.h> #include <math.h> int maxDistance(int arr[],int n){ int size = n; int maxD = -1; for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (arr[i] == arr[j]){ int temp=abs(j-i-1); maxD = maxD>temp?maxD:temp; } return maxD; } // Driver code int main(){ int Arr[] = {1,2,4,1,3,4,2,5,6,5}; printf("Maximum distance between two occurrences of same element in array:%d", maxDistance(Arr,10) ); return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Maximum distance between two occurrences of same element in array − 4