给一下本题O(n)的复杂度的代码
时间: 2024-09-22 10:07:14 浏览: 24
为了提供一个 O(n) 复杂度的代码示例,假设我们是在寻找一个整数列表中所有 n 倍数的二进制表示中 1 的最小数量。我们可以使用哈希集合(HashSet)来存储已经遇到过的 n 的倍数,以及一个变量记录当前找到的最小 1 数量。遍历整个列表,对于每一个数,我们将它的二进制表示转换成字符串,并计算其中的 1 的数量。如果是 n 的倍数且 1 的数量小于之前遇到的最小值,则更新这个最小值。
```python
def min_ones_for_n_multiples(nums, n):
ones_count = [0] * len(nums)
multiples_set = set()
for i, num in enumerate(nums, start=1):
binary_str = bin(num)[2:] # 转换为二进制字符串并去掉 '0b'
ones_count[i - 1] = binary_str.count('1')
# 检查是否是 n 的倍数
if num % n == 0:
multiples_set.add(i)
min_ones = float('inf')
for multiple_index in multiples_set:
if ones_count[multiple_index] < min_ones:
min_ones = ones_count[multiple_index]
return min_ones
# 示例
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 2
print(min_ones_for_n_multiples(nums, n)) # 输出:1
```
在这个代码中,我们总共遍历了 nums 列表一次,因此时间复杂度是 O(n)。
阅读全文