📅  最后修改于: 2023-12-03 15:39:28.446000             🧑  作者: Mango
给定一个长度为n的整数数组,进行q次操作,每次操作会将数组中所有大于等于k的数字减去k。请计算所有操作执行结束后,数组中不同数字的数量。
首先,数组中每个数字取值范围为 [0, 10^9],而k可能的取值范围也是 [0, 10^9],因此我们需要使用桶(bucket)来对所有数字进行分类处理。具体步骤如下:
def count_numbers(nums, k, q):
# 初始化桶
bucket = [0 for _ in range(10**9 + 1)]
# 统计每个数字出现的次数
for num in nums:
bucket[num] += 1
# 对数组进行操作
for i in range(len(nums)):
if nums[i] >= k:
nums[i] -= k
# 统计操作后每个数字出现的次数
for num in nums:
bucket[num] += 1
# 统计不同数字的数量
count = 0
for i in range(len(bucket)):
if bucket[i] > 0:
count += 1
return count
代码中的参数含义如下:
本题需要使用桶(bucket)进行分类处理,然后再遍历桶,统计不同数字的数量。时间复杂度为O(n),空间复杂度为O(10^9)。