计算C ++中的团队数量

假设有n名士兵排成一行。在此,为每个士兵分配一个唯一的评分值。我们必须使用以下规则组成一个由3名士兵组成的团队-

选择3个具有索引(i,j,k)的士兵,以使等级(rating [i],等级[j],等级[k])。

如果-(rating [i] <等级[j] <等级[k])或(rating [i]>等级[j]>等级[k]),则小组将有效。

我们必须找到可以组建的团队数量。(士兵可以是多个团队的一部分)。

因此,如果输入像等级= [2,5,3,4,1],那么输出将是3,因为我们可以组成三个团队,例如(2,3,4),(5,4,1) ,(5,3,1)。

为了解决这个问题,我们将遵循以下步骤-

  • ret:= 0,n:= v的大小

  • 对于初始化i:= 0,当i <n时,更新(将i增加1),执行-

    • 对于初始化k:= j + 1,当k <n时,更新(将k增加1),执行-

    • (增加ret 1)

    • (增加ret 1)

    • 如果v [i] <v [j]和v [j] <v [k],则-

    • 否则,当v [i]> v [j]和v [j]> v [k]时,则-

    • 对于初始化j:= i + 1,当j <n时,更新(将j增加1),-

    • 返回ret

    例 

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int numTeams(vector<int>& v) {
          int ret = 0;
          int n = v.size();
          for (int i = 0; i < n; i++) {
             for (int j = i + 1; j < n; j++) {
                for (int k = j + 1; k < n; k++) {
                   if (v[i] < v[j] && v[j] < v[k])
                      ret++;
                   else if (v[i] > v[j] && v[j] > v[k])
                      ret++;
                }
             }
          }
          return ret;
       }
    };
    main(){
       Solution ob;
       vector<int> v = {2,5,3,4,1};
       cout << (ob.numTeams(v));
    }

    输入值

    {2,5,3,4,1}

    输出结果

    3