给定大小为 N 的数组 A 。我需要找到子集中任何一对元素的最大子集的大小,其中一个元素可以被另一个元素整除。
简而言之,找到最大的子集 S ,其中∀i,j 其中 i≠j 和 i&lt; | S |和j&lt; | S | S i %S j = 0 或 S j 子>%S <子> I 子> = 0
问题的界限是:
示例输入/输出:
数组4 8 2 3
输出为3
解释
答案集是(4,8,2)
该组的大小为3
答案 0 :(得分:3)
我假设数组A中没有重复项。 一种方法(伪代码,假设数组索引从1开始):
def func(s: Seq[Char], idx: Int): String =
if(idx == s.length) "foo" else s(idx) match {
case ')' => func(s, idx+1)
case _ => func(s, idx+1)
}
def func1(s: Seq[Char], idx: Int): String =
if(idx == s.length) "foo" else (s(idx) == '(') match {
case true => func(s, idx+1)
case _ => func(s, idx+1)
}
import scala.util.Random
def randy = Stream.continually(Random.nextPrintableChar)
def doit(n: Int)(f: (Seq[Char], Int) => String) = {
val start = System.currentTimeMillis;
f(randy.take(n).toIndexedSeq, 0);
System.currentTimeMillis - start
}
scala> doit(1000000)(func)
res9: Long = 231
scala> doit(1000000)(func1)
res10: Long = 238
scala> doit(1000000)(func)
res11: Long = 234
scala> doit(1000000)(func1)
res12: Long = 201
这在O(n 2 )时间运行并使用O(n)额外空间。 它在数组B中计算最长除数链的长度,该除数链由A元素组成并在特定元素处结束。 B中的总体最大值必须是最长链的长度。