用 C++ 计算队伍数量

c++server side programmingprogramming

假设有 n 名士兵排成一排。这里每个士兵都被分配了一个唯一的评分值。我们必须使用以下规则在他们中组建一支由 3 名士兵组成的队伍 −

选择 3 名士兵,索引为 (i, j, k),评分为 (rating[i], ratings[j], ratings[k])。

如果 − (rating[i] < ratings[j] < ratings[k]) 或 (rating[i] > ratings[j] > ratings[k]),则队伍有效。

我们必须找出可以组建的队伍数量。 (士兵可以属于多个队伍)。

因此,如果输入为评级 = [2,5,3,4,1],则输出将为 3,因为我们可以组建三个队伍,如 (2,3,4)、(5,4,1)、(5,3,1)。

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

  • ret := 0, n := size of v

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

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

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

        • 如果 v[i] < v[j] 且 v[j] < v[k],则执行 −

          • (将 ret 增加 1)

        • 否则,当 v[i] > v[j] 且 v[j] > v[k],则执行 −

          • (将 ret 增加 1)

  • return 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

相关文章