【leetcode C】1395. 统计作战单位数

题目

n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。
每 3 个士兵可以组成一个作战单位,分组规则如下:
从队伍中选出下标分别为 i、j、k 的 3 名士兵,他们的评分分别为 rating[i]、rating[j]、rating[k]
作战单位需满足: rating[i] < rating[j] < rating[k] 或者 rating[i] > rating[j] > rating[k] ,其中 0 <= i < j < k < n
请你返回按上述条件可以组建的作战单位数量。每个士兵都可以是多个作战单位的一部分。

代码

int numTeams(int* rating, int ratingSize)
{
 int book[ratingSize][4];
 int sum=0;
 memset(book,0,sizeof(book));
 for(int i=0;i<ratingSize;i++)
 {
  for(int j=i;j<ratingSize;j++)
  {
   if(rating[i]>rating[j])
   {
    book[i][3]++;
    book[j][0]++;
    sum+=book[i][0];
   }
   else
   {
    book[i][2]++;
    book[j][1]++;
    sum+=book[i][1];
   }
  }
 }
 return sum;
}

结果:
在这里插入图片描述

说明:
使用book[i]记录i士兵:
book[i][0]:i士兵之前比i士兵rating大的数
book[i][1]:i士兵之前比i士兵rating小的数
book[i][2]:i士兵之后比i士兵rating大的数
book[i][3]:i士兵之后比i士兵rating小的数
i<j,查询book[i][0]或book[i][1],找到i之前可以和i,j构成"作战单位"的士兵数

时间复杂度O(N2)

猜你喜欢

转载自blog.csdn.net/qq_44381135/article/details/107641101