我对我收到的作业有困难,我很确定问题的文本有缺陷。我把它翻译成:考虑列表x(1…2n]具有{1,2,…,m },m<n的元素。在Python中提出并实现具有O(n)复杂性的算法,该算法将元素分组成对(x[i],x[j])与i For example, x = [1,5,9,3] can be paired in three ways:(1,5),(9,3) => Sums: 6, 12 => Maximum 12(1,9),(5,3) => Sums: 10, 8 => Maximum 10(1,3),(5,9) => Sums: 4, 14 => Maximum 14 ---------- Minimum 10Solution to be returned: (1,9),(5,3)让我感到奇怪的是:表内容定义它表示存在1..2n, from {1..m}, m < n的元素。但是如果m < n,则没有足够的元素来填充列表而不复制某些元素,这是不允许的。所以我假设m >= 2n。另外,这个例子有n = 2但是使用了大于1的元素,所以我假设这就是它们的意思。O(n)复杂度?那么有没有办法把它们组合成一个循环呢?我什么都想不起来。我的计算:For n = 4:Number of ways to combine: 6Valid ways: 3For n = 6Number of ways to combine: 910Valid ways: 15For n = 8Number of ways to combine: >30 000Valid ways: ?所以很明显,我不能使用暴力,然后找出它是否有效之后。我用来计算所有可能的方法的公式是C(C(n,2),n/2)问题这个问题写错了,不可能解决吗?如果是,应该添加或删除哪些条件以使其可行?如果您打算推荐一些python代码,请记住,我不能使用任何类型的预构建函数谢谢你 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 假设列表已排序:def answer(L): return list(zip(L[:len(L)//2], L[len(L)//2:][::-1]))或者如果您想更手动地执行此操作:def answer(L): answer = [] for i in range(len(L)//2): answer.append((L[i], L[len(L)-i-1)])) return answer输出:In [3]: answer([1,3,5,9])Out[3]: [(1, 9), (3, 5)]关于python - 算法-唯一对分组列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34599378/ (adsbygoogle = window.adsbygoogle || []).push({});
10-09 17:14