美文网首页
统计作战单位数

统计作战单位数

作者: WAI_f | 来源:发表于2020-08-05 10:38 被阅读0次

题目:

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
请你返回按上述条件可以组建的作战单位数量。每个士兵都可以是多个作战单位的一部分。

示例:

输入:rating = [2,5,3,4,1]
输出:3
解释:我们可以组建三个作战单位 (2,3,4)、(5,4,1)、(5,3,1) 。

解题方法:

遍历[1,n-1]的士兵,对于第i个士兵,我们把他当做要选择作战单位的中间士兵,然后只需要统计在这个士兵左边/右边,大于/小于该士兵i评分rating。下面详细说明一下为什么这么做:

  • 首先统计第i个士兵大于左边士兵rating的数量,记做lb;再记录小于右边的数量rs;现在满足条件的排列数为lb*rs(组合)
  • 然后统计第i个士兵小于左边士兵rating的数量,记做ls;再记录大于右边的数量rb;现在满足条件的排列数为ls*rb(组合)
  • 遍历完[1,n-1]的士兵,将所有统计的可能组合累加,得到最终结果。

为什么这样统计出来的没有重复呢?仔细想想,关键在于选择中间人作为筛选的条件,当筛选第i个士兵的时候,所有的组合都是i为中间人,但是当筛选第i+k个人的时候,i不可能在中间,所以这种遍历方式保证了不会出现重复的排列。

代码和结果:

class Solution {
public:
    int numTeams(vector<int>& rating) {
        int nums=rating.size();
        int cnt=0;
        for(int i=1;i<nums-1;i++)
        {
            int lb=0;
            int ls=0;
            int rb=0;
            int rs=0;
            
            for(int j=0;j<i;j++)
            {
                if(rating[j]>rating[i])
                    lb++;
                else if(rating[j]<rating[i])
                    ls++;
            }

            for(int j=i+1;j<nums;j++)
            {
                if(rating[j]>rating[i])
                    rs++;
                else if(rating[j]<rating[i])
                    rb++;
            }
            cnt+=lb*rb+ls*rs;
        }
        return cnt;
    }
};
运行结果:

第200道题了,加油!

原题链接:https://leetcode-cn.com/problems/count-number-of-teams/

相关文章

  • 统计作战单位数

    题目: n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。每 3 个士兵可以组成一个作战单位...

  • 统计作战单位数

    LeetCode第1395题 题目描述:n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。 ...

  • LeetCode | 1395. Count Number of

    LeetCode 1395. Count Number of Teams统计作战单位数【Medium】【Pytho...

  • 常用分析技术

    描述统计、相关系数、t检验、回归 一、描述统计 统计单变量 平均数(峰度)、标准误差(偏度)、中位数(区域)、众数...

  • Pandas3——统计,运算,文件读取

    1. 基本统计分析函数 data.describe()综合分析,计算平均值,标准差,最大值,最小值,各种分位数 单...

  • 个位数统计

    题目:给定一个k位整数N = dk-1*10k-1+ ... + d1*101+ d0(0<=di<=9, i=0...

  • 数学分位数

    在统计里面,有 quantile (分位数)的概念从小到大排列其中,median(中位数)也就是二分位数first...

  • 评分卡之探索性数据分析

    EDA也被称为数据的初步分析,一般包括对以下一些或全部的探索: 单变量的统计特性和分布 均值、众数、标准差等分位数...

  • C语言编程 C Language Programming - 0

    编程题0001 (from Programming Teaching Assistant (PTA)) 统计个位数...

  • 33统计基础- 分位数-分位数图

    我们共检测了15个基因的表达。这个数据是正态分布的吗?Q-Q图有助于回答这个问题。 给每个点一个分位数 得到一条正...

网友评论

      本文标题:统计作战单位数

      本文链接:https://www.haomeiwen.com/subject/ctsyrktx.html