用 C++ 统计满足给定条件的索引对
给定一个前 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 }
输出
Count of index pairs which satisfy the given condition: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。
在所有这些中,只有一对满足条件。
输入
Arr[]= { 1,2,5,4,3 }
输出
Count of index pairs which satisfy the given condition: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。
在所有这些中,有两对满足条件。
下面程序中使用的方案如下
整数数组 Arr[] 存储数字,其长度为 size。
函数 countPairs(int A[],int n) 以数组及其大小 n 作为输入,并返回满足上述条件的对的个数。
变量 count 用于存储此类对的初始值 0。
将 max1 初始化为第一个元素,并将 maxindex 中的索引初始化为 0,以存储迄今为止找到的最大值及其索引。
使用 for 循环开始遍历数组。
在嵌套的 for 循环内,如果给定的 A[j]>=max1,则用 j 更新 max1 及其索引。
对于 A[i] 和 A[j] 的每一对,如果和等于 max1 且索引 maxindex 在 i 和 j 之间,则递增 count,因为条件满足。
在两个循环结束后,返回 count 中的结果。
示例
// CPP implementation of the approach #include<bits/stdc++.h> using namespace std; // Function to return the count of // required index pairs int countPairs(int A[], int n){ // To store the required count 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 of subsegments return count; } int main(){ int Arr[] = {3, 4, 6, 1, 5, 2}; int size =6; cout <<endl<<"Count of index pairs which satisfy the given condition:" <<countPairs(Arr,size); return 0; }
输出
Count of index pairs which satisfy the given condition: 1