1. 题目来源
2. 题目说明
3. 题目解析
方法一:暴力+常规解法
观察数据范围很小直接枚举就可以了。题目就是要求该数组中能形成多少个 递增或递减的三元组。以递减三元组为例,即以中间位置为基准值,在左侧寻找大于该基准值的数,在右侧寻找小于该基准值的数就行了。思路很容易想到,实现的话就三层 for
循环顺利通过。
参见代码如下:
// 执行用时 :68 ms, 在所有 C++ 提交中击败了100.00%的用户
// 内存消耗 :7.7 MB, 在所有 C++ 提交中击败了100.00%的用户
class Solution {
public:
int numTeams(vector<int>& rating) {
int cnt = 0;
for (int i = 0; i < rating.size(); ++i) {
for (int j = 0; j < i; ++j) {
if (rating[j] < rating[i]) {
for (int k = i + 1; k < rating.size(); ++k) {
if (rating[i] < rating[k]) ++cnt;
}
}
}
for (int j = 0; j < i; ++j) {
if (rating[j] > rating[i]) {
for (int k = i + 1; k < rating.size(); ++k) {
if (rating[i] > rating[k]) ++cnt;
}
}
}
}
return cnt;
}
};