【发布时间】:2019-10-06 06:03:57
【问题描述】:
考虑一个数组:10 2 4 14 1 7
遍历每个有效 i 的输入数组,我必须找到所有可被第 i 个元素整除的元素。所以,首先我必须找到所有大于第 i 个元素的元素。
示例输出:
10 -> null
2 -> 10
4 -> 10
14 -> null
1 -> 14,4,2,10
7 -> 14,10
我的方法: 我正在考虑创建一个二叉树,该二叉树将为数组中的每个有效插入执行 log n 操作,该数组将重新构造二叉树,其中最小元素为根,左侧元素较小,右侧元素较大。现在我只需要遍历插入元素的右子树并检查哪些元素可以被第 i 个元素整除。这是一种非常昂贵的方法,但比蛮力更好。
谁能帮助找到一个更有效的最佳解决方案?
【问题讨论】:
-
你的问题有点含糊。该函数是否应该将数组作为输入,然后返回一个列表列表,如
[None, [10], [10], None, [14,4,2,10], [14,10]]。还是它需要数组和索引并返回元素列表 > array[i]? -
不,我写这个是因为它很容易理解。实际输出应该是一个整数,它是第 i 个元素可以划分的最大元素数。
-
所以调用函数看起来像
function(array, index),它会返回索引 0...(i-1) 处的值的数量,这些值可以被索引处的值整除i?您是否希望使用相同的数组但不同的索引多次调用该函数? -
是的,但完整的方法应该是 O(nlogn) 而不是 O(n^2)
标签: python arrays algorithm c++14 binary-tree