对于我的算法设计课程,家庭作业来自这个脑筋急转弯:
Given a list of N distinct positive integers, partition the list into two
sublists of n/2 size such that the difference between sums of the sublists
is maximized.
Assume that n is even and determine the time complexity.
乍一看,解决方案似乎是
这将具有O((n log n)+ n)
这个问题有更好的算法选择吗?
答案 0 :(得分:8)
由于你可以在O(n)时间内计算中位数,你也可以在O(n)时间内解决这个问题。计算中位数,并将其用作阈值,创建高数组和低数组。
关于计算O(n)时间中位数的http://en.wikipedia.org/wiki/Median_search。
答案 1 :(得分:4)
尝试
你正在做的是找到中位数。诀窍是,一旦找到了值,就不需要对前n / 2和最后n / 2进行排序。