【发布时间】:2016-06-05 21:21:18
【问题描述】:
我们得到了整数的列表/数组(我们可以同时使用)
一步,我们可以减去其中两个并放入列表/数组
做这个操作我们能得到的最小数字(或相同数字)是多少( > 0 )
f.e 我们有 6 4 2
第一步取 6 和 4,我们得到 2 和 2,所以 anwser 是 2
1 7 5
取 7 和 5,我们得到 2 和 1,然后我们得到 1
8 20 4 15
取 20 和 15,我们得到 8 5 4,取 8 和 5,我们得到 4 和 3,然后我们得到 1
我可以在时间 T(n) = n^n 内做到这一点,通过比较所有内容或对每一轮进行排序,我们如何才能更快地做到这一点?
【问题讨论】:
-
如果列表已经排序,你不能采取一种贪婪的方法,从列表的末尾开始,然后减去左边的那个,然后重新插入并继续这样做吗?
-
到目前为止你尝试过什么?我们不会为你做作业。请阅读stackoverflow.com/help/how-to-ask
-
好的,所以我的第一次尝试是将所有内容与所有内容进行比较比我考虑排序列表/数组和使用优先级队列,只需添加减法(它不起作用)我在想集合,我们总是取 2 个最大的并把它,当集合的最大值等于集合的最小值时,我们可能会结束,但是我认为最后一个不起作用 Greey 方法可能不起作用我我们无法对每个列表/数组进行排序移动
-
我又尝试了一些方法,并相应地更新了我的答案,但我认为你最好的办法就是找到最大的数字,然后在每个步骤中从中减去所有其他数字。跨度>
标签: arrays algorithm list math time