用 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

更新于: 2020-07-28

323 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告