📅  最后修改于: 2023-12-03 14:48:51.388000             🧑  作者: Mango
在处理数组时,有时需要统计数组中有多少个元素不能被其它元素整除。本文介绍一种解决这个问题的算法。
假设数组为 arr
,数组长度为 n
。对于每个元素 arr[i]
,我们可以通过检查其它元素是否能被它整除来判断它是否符合条件。但这种方法时间复杂度为 $O(n^2)$,对于大规模数据会非常慢。我们可以换一种思路,先对数组进行排序,这样就可以保证较小的数先被处理。对于每个数 arr[i]
,我们向右依次检查它后面的数是否能被它整除,如果有能被整除的,就可以跳过剩下的数,因为如果一个数能被另一个数整除,那么后者一定能被前者整除。
def count_uncommon_elements(arr):
n = len(arr)
arr.sort()
count = 0
for i in range(n):
flag = True
for j in range(i + 1, n):
if arr[j] % arr[i] == 0:
flag = False
break
if flag:
count += 1
return count
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
count = count_uncommon_elements(arr)
print(f"There are {count} uncommon elements in the array.")
输出:
There are 4 uncommon elements in the array.
本文介绍了一种统计数组中不能被其它元素整除的元素个数的算法。该算法时间复杂度为 $O(n\log n)$,比 $O(n^2)$ 的暴力算法快得多。在实际应用中,该算法可以被用来解决很多问题,例如求最大公约数、最小公倍数等。