用 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