在数组中找到最整除的数字?

时间:2019-04-07 20:59:18

标签: dynamic-programming quicksort

在面试中遇到一个问题,找到数组中其他数字最能除的数,例如[2,4,8],那么8可以除以3个数字,那就是ans。我有一个O(N ^ 2)解决方案,但是有比O(N ^ 2)更好的解决方案吗?

我认为,像快速排序之类的方法很有用,但还不能解决问题,例如a%b,b%c => a%c,但是%操作不是像>操作那样过渡的。

1 个答案:

答案 0 :(得分:1)

您可以使用O(NlogN)处理树。

我认为最快的算法是使用以下规则制作堆树(AVL树是最佳选择):

对于输入x:查找x%node [i] == 0或node [i]%x == 0

如果您发现此节点将x添加到node [i]的子级集合中,或将Node [i]替换为x,然后将Node [i]添加到x的子级集合中。

否则将此节点添加到根节点。