크기가 N인 정수 배열이 제공됩니다. 배열은 임의의 순서로 정수로 구성됩니다. 작업은 배열 요소의 첫 번째 인덱스와 마지막 인덱스 간의 최대 차이를 찾는 것입니다. 배열에서 두 번 나타나는 숫자를 찾아야 하며 인덱스 간의 차이가 최대입니다. 그러한 쌍이 더 있으면 색인 간의 최대 차이를 저장합니다.
입력
Arr[] = { 2,1,3,1,3,2,5,5 }.
출력 −배열에 있는 요소의 첫 번째 인덱스와 마지막 인덱스 간의 최대 차이 − 5
설명 − 요소 쌍과 인덱스 간의 차이는 다음과 같습니다. −
(2,2) Arr[0] and Arr[5] 5-0=5 max difference till now is 5 (1,1) Arr[1] and Arr[3] 3-1=2 max difference till now is 5 (3,3) Arr[2] and Arr[4] 4-2=2 max difference till now is 5 (5,5) Arr[6] and Arr[7] 7-6=1 max difference till now is 5
입력
Arr[] = { 2,2,3,4,8,3,4,4,8,7 }.
출력 −배열에 있는 요소의 첫 번째 인덱스와 마지막 인덱스 간의 최대 차이 − 4
설명 − 요소 쌍과 인덱스 간의 차이는 다음과 같습니다. −
(2,2) Arr[0] and Arr[1] ; 1-0=1; max difference till now is 1 (3,3) Arr[2] and Arr[5] ; 5-2=3; max difference till now is 3 (4,4,4) Arr[3],Arr[6],Arr[7] ; 7-6=1,6-3=3,7-3=4; max difference till now is 4 (8,8) Arr[4] and Arr[8] ; 8-4=4 ; max difference till now is 4
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
임의의 순서로 반복되는 숫자를 포함하는 정수 배열을 선언합니다.( Arr[] )
-
배열의 크기를 저장할 변수를 만듭니다. (N)
-
maxDifference(int Arr[],int n) 함수는 배열 요소의 첫 번째 인덱스와 마지막 인덱스 간의 최대 차이(maxD)를 계산하는 데 사용됩니다.
-
maxDifference() 내부에서 maxD가 지금까지 발견된 최대 인덱스 차이를 저장하는 데 사용된다고 선언했습니다.
-
첫 번째 요소( 인덱스 i=0 )에서 시작하여 for 루프를 사용하여 배열을 탐색합니다.
-
중첩 for 루프에서 마지막 인덱스에 도달할 때까지 나머지 배열(j=i+1)을 탐색합니다.
-
Arr[i]와 동일한 요소를 찾으면 인덱스 i,j 간의 차이를 계산하고 maxD의 이전 값보다 크면 maxD를 업데이트합니다.
-
for 루프가 끝날 때까지 이 작업을 계속합니다.
-
maxD에 저장된 결과를 반환합니다.
예시
#include <stdio.h> int maxDifference(int arr[],int n){ int maxD=0; for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(arr[i]==arr[j] && (j-i)>maxD) maxD=j-i; } } return maxD; } int main(){ int Arr[] = {1, 4, 1, 3, 3, 5, 4, 5, 2}; int N = sizeof(Arr) / sizeof(Arr[0]); printf("Maximum difference between first and last indexes of an element in array : %d" ,maxDifference(Arr, N); return 0; }
출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -
Maximum difference between first and last indexes of an element in array : 5