2 solutions
-
0
题解描述
在这道题中,需要计算每个小朋友右侧比自己身高低的人的数量。这是一个典型的数组统计问题,可以通过暴力统计方法解决。
代码思路
暴力统计法的核心思想是:
- 从右到左遍历每一个小朋友,使用一个数组
cnt
来记录当前所有出现过的不同高度小朋友的数量。 - 每当遍历到一个新的小朋友时,通过数组
cnt
中的数据可以快速计算出比当前小朋友低的所有小朋友的数量。 - 由于小朋友的身高范围有限(40到110),因此我们可以利用一个定长的数组来存储每个身高出现的频次,从而避免复杂的数据结构并提升性能。
具体步骤如下:
- 输入数据:首先读取小朋友的数量
n
,然后读取每个小朋友的身高并存储在数组a
中。 - 遍历并统计:从右向左遍历小朋友,记录当前小朋友的高度,将此高度计数加1,然后在计数数组
cnt
中统计出比当前小朋友低的所有身高的人数总和。 - 输出结果:结果存储在数组
ans
中,最后依次输出ans
数组内容。
时间复杂度
对于每个小朋友,统计比自己低的高度的操作在高度范围内(40到110,即70种不同的身高)循环一次。因此时间复杂度为 (O(n \times h)),其中 (h) 为可能的身高值数量,即常数 70。所以,整体复杂度约为 (O(n)),性能可以满足要求。
C++代码
Python代码
Java代码
说明
- 数组
cnt
:用于记录每种身高出现的频次,从而可以直接查询到比当前身高小的所有小朋友的数量。 - 遍历顺序:从右向左遍历,以便在统计过程中能够依次更新右侧的身高信息。
- 高度范围处理:身高的最小值是 40,因此在循环统计低于当前身高的小朋友数量时从 40 开始。这里假设高度的上限不会超过 200,从而将
cnt
定义为长度 200。
这种方法利用身高范围的限制和哈希表统计,从而使复杂度控制在 (O(n)) 左右,可以应对较大的数据输入。
- 从右到左遍历每一个小朋友,使用一个数组
- 1
Information
- ID
- 11
- Time
- 2000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 353
- Accepted
- 68
- Uploaded By