解法一
每个作战单位都是一个有序三元组。确定中间元素后,那么就只能在它的左侧寻找第一个元素,在它的右侧寻找第三个元素。
对于已经确定中间元素的三元组,总共有
- leftSmaller:位于左侧且比它小的数的个数
- rightBigger:位于右侧且比它大的数的个数
- leftBigger:位于左侧且比它大的数的个数
- rightSmaller:位于右侧且比它小的数的个数
class Solution {
public int numTeams(int[] rating) {
int n = rating.length;
int ans = 0;
// 位于左侧且比它小的数的个数
int leftSmaller;
// 位于右侧且比它大的数的个数
int rightBigger;
// 位于左侧且比它大的数的个数
int leftBigger;
// 位于右侧且比它小的数的个数
int rightSmaller;
int i, j;
for (i = 0; i < n; ++i) {
leftSmaller = 0;
rightBigger = 0;
leftBigger = 0;
rightSmaller = 0;
for (j = 0; j <= i - 1; ++j) {
if (rating[j] < rating[i]) {
leftSmaller++;
} else {
leftBigger++;
}
}
for (j = i + 1; j < n; ++j) {
if (rating[j] > rating[i]) {
rightBigger++;
} else {
rightSmaller++;
}
}
ans += leftSmaller * rightBigger + leftBigger * rightSmaller;
}
return ans;
}
}