【发布时间】:2018-08-04 03:35:17
【问题描述】:
假设我有一组仅包含 0 和 1 的恒定长度数组。我的目标是找出在任何数组旋转后,数组的元素总和是否不会超过 1。
例如,假设我有以下三个数组:[1, 0, 0, 0], [1, 0, 1, 0] 和 [1, 0, 0, 0]。我可以将第二个数组旋转一个元素,将第三个数组旋转两个元素以获得数组[1, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0],其元素总和为[1, 1, 1, 1]。但是,如果我不应用旋转,我会得到 [3, 0, 1, 0] 的总和,这不符合我的要求,因为其中一个元素(3)大于 1。
现在,我的问题是,有什么方法可以快速确定这是否适用于任意数量的数组?例如,无法旋转 [1, 0, 0, 0], [1, 0, 1, 0], [1, 0, 1, 0] 以使总和的元素不超过 1。
当前的启发式方法
显然,如果数组的总和,例如长度n,超过n,那么这是微不足道的。
到目前为止,我能想到的最佳方法是采用两个数组,找到一种方法将它们合并在一起,然后反转结果。然后,我们取这个结果和下一个数组,并重复这个过程。但是,这种方法并不能保证找到解决方案(如果存在)。
我的问题是,如果没有尝试所有可能的旋转,那么解决这个问题的好算法是什么?
【问题讨论】:
-
N 对你的任务来说有多大?
-
非常小——数组的长度小于 100。
标签: java arrays algorithm language-agnostic heuristics