解法一

每个作战单位都是一个有序三元组。确定中间元素后,那么就只能在它的左侧寻找第一个元素,在它的右侧寻找第三个元素。
对于已经确定中间元素的三元组,总共有
1395. 统计作战单位数 - 图1

  • leftSmaller:位于左侧且比它小的数的个数
  • rightBigger:位于右侧且比它大的数的个数
  • leftBigger:位于左侧且比它大的数的个数
  • rightSmaller:位于右侧且比它小的数的个数
  1. class Solution {
  2. public int numTeams(int[] rating) {
  3. int n = rating.length;
  4. int ans = 0;
  5. // 位于左侧且比它小的数的个数
  6. int leftSmaller;
  7. // 位于右侧且比它大的数的个数
  8. int rightBigger;
  9. // 位于左侧且比它大的数的个数
  10. int leftBigger;
  11. // 位于右侧且比它小的数的个数
  12. int rightSmaller;
  13. int i, j;
  14. for (i = 0; i < n; ++i) {
  15. leftSmaller = 0;
  16. rightBigger = 0;
  17. leftBigger = 0;
  18. rightSmaller = 0;
  19. for (j = 0; j <= i - 1; ++j) {
  20. if (rating[j] < rating[i]) {
  21. leftSmaller++;
  22. } else {
  23. leftBigger++;
  24. }
  25. }
  26. for (j = i + 1; j < n; ++j) {
  27. if (rating[j] > rating[i]) {
  28. rightBigger++;
  29. } else {
  30. rightSmaller++;
  31. }
  32. }
  33. ans += leftSmaller * rightBigger + leftBigger * rightSmaller;
  34. }
  35. return ans;
  36. }
  37. }

解法二

参考:https://leetcode-cn.com/problems/count-number-of-teams/solution/tong-ji-zuo-zhan-dan-wei-shu-by-leetcode-solution/
待实现