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
广告