我们给了前N个自然数的排列数组。这里的目标是找到满足以下条件的元素的索引对-
如果数组是Arr [],则i,j是索引,对元素对进行计数,使Arr [i] + Arr [j] = max(Arr [x])使得i <= x <= j。
即,Arr [i]和A [j]之和等于在这两个段之间出现的最大元素。
Arr[]= { 2,4,1,3,6,5 }
输出结果
满足给定条件的索引对的数量:1
说明-对的总和给出-
2 + 4 = 6,最大为6,但不在2到4之间。
2 + 1 = 3,3不在2和1之间,并且它们之间的最大值为4。
2 + 3 = 5,5不在2到3之间,它们之间的最大值是4。
2 + 6 = 8,8不在2到6之间,最大值在4之间。
相似地
1 + 5 = 6,6在1到5之间,最大值在6之间。
在所有满足条件的对中,只有1对存在。
Arr[]= { 1,2,5,4,3 }
输出结果
满足给定条件的索引对的数量:2
说明-对的总和给出-
1 + 5 = 6,最大为6,但不在1到5之间。
1 + 4 = 5,5在1到4之间,最大值在5之间。
2 + 3 = 5,5在2到3之间,并且它们之间的最大值为5。
1 + 3 = 4,4在1到3之间,但它们之间的最大值为5。
在所有满足条件的2对中。
整数数组Arr []存储数字并确定其长度。
函数countPairs(int A [],int n)将一个数组及其大小n作为输入,并返回满足上述条件的对数。
变量计数用于存储此类对的初始值0。
用第一个元素及其在maxindex中的索引初始化为max1,以存储到目前为止找到的最大值的值和索引。
开始使用for循环遍历数组。
如果给定A [j]> = max1,则在嵌套的for循环内,然后用j更新max1及其索引。
对于每对A [i]和A [j],如果sum等于max1且索引maxindex在i和j之间,则满足条件时增加计数。
在结束之后,两个循环都返回存在于count中的结果。
// CPP implementation of the approach #include<bits/stdc++.h> using namespace std; //函数返回计数 //必需的索引对 int countPairs(int A[], int n){ //要存储所需的计数 int count = 0; int i,j,k; int max1=A[0]; int maxindex=0; for ( i = 0; i<n-1; i++){ for(j=i+1;j<n;j++){ if(A[j]>=max1){ max1=A[j]; maxindex=j; } if(A[i]+A[j]==max1 && maxindex>=i && maxindex<=j) count++; } } //返回子段数 return count; } int main(){ int Arr[] = {3, 4, 6, 1, 5, 2}; int size =6; cout <<endl<<"满足给定条件的索引对的数量:" <<countPairs(Arr,size); return 0; }
输出结果
满足给定条件的索引对的数量: 1