在面试中遇到一个问题,找到数组中其他数字最能除的数,例如[2,4,8],那么8可以除以3个数字,那就是ans。我有一个O(N ^ 2)解决方案,但是有比O(N ^ 2)更好的解决方案吗?
我认为,像快速排序之类的方法很有用,但还不能解决问题,例如a%b,b%c => a%c,但是%操作不是像>操作那样过渡的。
答案 0 :(得分:1)
您可以使用O(NlogN)处理树。
我认为最快的算法是使用以下规则制作堆树(AVL树是最佳选择):
对于输入x:查找x%node [i] == 0或node [i]%x == 0
如果您发现此节点将x添加到node [i]的子级集合中,或将Node [i]替换为x,然后将Node [i]添加到x的子级集合中。
否则将此节点添加到根节点。