【发布时间】:2017-02-04 13:27:48
【问题描述】:
我一直致力于解决递增子序列问题。我提出的算法目前仅解决排序数组。我正在用 python 3.5 编写我的代码。这个问题托管在 Leetcode 上。
在递增子序列问题中,给我一个整数数组,任务是找到给定数组的所有不同的可能递增子序列,递增子序列的长度至少应为2。
例子:
输入- [4,6,7,7]
输出 - [[4,6],[4,7],[4,6,7],[4,6,7,7],[6,7],[6,7,7], [7,7],[4,7,7]]
这是我解决这个问题的工作代码:
array = [4,6,7,7]
def incrSubseq(array): #Only works for sorted arrays.
res = [[]]
ans = []
for num in array:
res += [item + [num] for item in res if (item+[num] not in res)]
for values in res:
if len(values)>1:
ans = ans + [values]
print(ans)
incrSubseq(array)
这段代码是如何工作的?
- 首先初始化一个结果变量
res(列表列表) 它由一个空列表初始化。 - 然后我遍历给定的整数数组
array,它按排序顺序,将每个元素添加到列表中,从而找到可以形成的所有子集。列表推导式中的if语句过滤掉重复项,因此只保留列表的一份副本。 - 然后过滤所有长度大于1的数组。
这样,问题就解决了。
现在,我在这里缺少的是一种解决未排序数组的方法。据我了解,我需要以一种方式进行检查,即当我尝试将元素添加到 res 时,它应该大于或等于它之前的项目。
res += [item + [num] for item in res if (item+[num] not in res) and (item <= num)] 给出空列表。
对改进代码有什么建议吗?
【问题讨论】:
标签: arrays algorithm python-3.x sorting