输入格式
第一行输入一个正整数 n,表示鱼的数目。
第二行内输入 n 个正整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度 a-下标i。
输出格式
一行,输出 n 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。
| 方法 | 时间复杂度 | 适用场景 |
|---|---|---|
| 暴力法(双重循环) | O(n²) | 通用场景,n 较小(如 n ≤ 1e4) |
| 前缀和计数法 | O(n * k) | 数值范围小(如 k ≤ 100) |
暴力法
def oi_input():
n = int(input())
a = list(map(int, input().split()))
return n, a
def test():
n = 6
a = [4, 3, 0, 5, 1, 2]
return n, a
def solution(n, a):
res = [] # 用于存储每个的情况
for i in range(n):
count = 0
for j in range(i):
if a[j] < a[i]:
count += 1
res.append(str(count))
print(' '.join(res))# 空格分割的拼接
if __name__ == '__main__':
n, a = oi_input()
# n, a = test()
solution(n, a)
前缀和计数法
def oi_input():
n = int(input())
a = list(map(int, input().split()))
return n, a
def test():
n = 6
a = [4, 3, 0, 5, 1, 2]
return n, a
def solution(n, a):
'''对于遍历,长度就没用上了'''
count = [0] * 11 # 数值范围0~10
res = [] # 用于存储每个的情况
for num in a:
'''统计当前元素左边比它小的总数'''
total = sum(count[:num])
res.append(str(total))
count[num] += 1 # 更新计数数组
print(' '.join(res)) # 空格分割的拼接
if __name__ == '__main__':
n, a = oi_input()
# n, a = test()
solution(n, a)
1459

被折叠的 条评论
为什么被折叠?



