C语言中数组元素首尾索引的最大差值
给定一个大小为 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
广告