C++ 统计团队数量


假设有 n 个士兵站成一列。每个士兵都被分配了一个唯一的评级值。我们必须根据以下规则在他们中间组建一个 3 人团队:

选择 3 个士兵,索引为 (i, j, k),其评级为 (rating[i], rating[j], rating[k])。

如果满足以下条件,则团队有效:(rating[i] < rating[j] < rating[k]) 或 (rating[i] > rating[j] > rating[k])。

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

因此,如果输入类似于 rating = [2,5,3,4,1],则输出为 3,因为我们可以组建三个团队,例如 (2,3,4), (5,4,1), (5,3,1)。

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

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

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

    • for 初始化 j := i + 1,当 j < n 时,更新(j 增加 1),执行:

      • for 初始化 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)

  • 返回 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

更新于:2020年11月17日

282 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告