解法一
每个作战单位都是一个有序三元组。确定中间元素后,那么就只能在它的左侧寻找第一个元素,在它的右侧寻找第三个元素。
对于已经确定中间元素的三元组,总共有
- 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;}}
