【发布时间】:2015-09-24 22:37:54
【问题描述】:
我有一个对我来说似乎不可能的问题。我有 2+ 个数组,我必须比较它们的共同值。我应该在 O(N) 比较中这样做,但想不出办法。特别是 (k-1)N 次比较,其中 k 是数组的数量。我已经缩小了如何获取多个数组并将它们合并到一个数组中的范围。我已经知道最小的数组是限制因素,所以如果我排序,我可以保存最多的比较。在盯着我的屏幕看了半天之后,我什至想出了一种方法来线性地做到这一点,如果我打折任何重复项,但我必须保留重复项所以,据我所知,为了比较你需要的任何数组至少 2 个 for 循环是 O(N^2) 不是吗?我也不允许散列任何东西。
例如,如果我有 {1,3,4,3,4,5} 作为主人,{1,1,3,5,9,3,7} 和 {3,5,8,4, 0,3,2} 作为要比较的数组,我需要有一个 {3,3,5} 的决赛,因为我无法摆脱任何重复。
我不想让任何人写代码,我只需要知道我首先应该做什么。
【问题讨论】:
-
如果数组未排序,我也觉得不可能。
-
我可以对它们进行排序。如果是的话,你有什么办法吗??
-
不过,对它们进行排序需要的不仅仅是 O(n) 次比较。
-
允许在比较它们的方法之外进行排序。只有将它们与实际最终数组进行比较的方法需要 O(N)。
-
@Read_My_Feels991:如果我的方法有效,请告诉我。我已经更新了。
标签: java arrays algorithm performance comparison