Python-算法语句

标签 python algorithm

我想编写一个执行以下操作的程序:-

示例输入:

3
10 4 18 2 6 19 24 1 20

预期输出:

4 2 2 2 6 1 1

输入将来自一个文件,其中第一行将包含窗口大小 N,第二行将包含一串由空格分隔的数字。您需要输出每个窗口中以空格分隔的最小数字。

这是我写的:-

with open ("file") as f1:
    n = int(f1.readline())
    numbers = f1.readline()

# converting the string of numbers into a list
numbers_list = map(int,numbers[:-1].split(' ')) 

# getting all the sub-lists of size n from the numbers_list and printing their respective minimum elements.
print [min(numbers_list[i:i+n]) for i in xrange(len(numbers_list)-n+1)] 

我的 o/p

[4, 2, 2, 2, 6, 1, 1]

还有比这更好的解决方案吗?此解决方案的任何优化版本。

最佳答案

map(min, [nums[x:x+window] for x in xrange(len(nums)-(window-1))])

但是,这会创建一个中间列表,因此:

[min(nums[x:x+window]) for x in xrange(len(nums)-(window+1))] 

实际上更好,这就是您目前拥有的。

有一种更省时的方法,但是,它需要更多的代码。获得窗口的最小值后,您所做的就是查看下一个槽,因此您需要做的就是将前一个 (window-1) 元素的最小值与下一个值进行比较。结果列表中的下一个数字将以较小者为准。重复。

例如,如果您有一个四元素列表并且您的窗口大小为 3。结果列表中的第一个值将是前三个元素中的最小值,结果列表中的第二个值将是前三个元素中的最小值最后三个元素。

那里有两个元素重叠。因此,您可以保存最后一个 window-1 元素的最小值,并将其与列表中的下一个值进行比较,以获得下一个窗口的最小值。重复。

关于文件处理,

with open ("file") as f1:
    n = int(f1.readline())
    numbers_list = map(int, f1.readline().split(' ')) 

效率稍微高一些。

关于Python-算法语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20417925/

相关文章:

python - ReportLab - 无法屏蔽图像 [Google App Engine]

arrays - 如何找到最近的N个网格点(贪心)

algorithm - matlab中高效的密集对角矩阵生成

java - 节点间距离不规则的 A* 算法启发式

algorithm - 如何测试完美优化的算法?

python - 简化 if 语句 Python

python - 使用第二个矩阵选择三维元素,将 3D 数组展平为 2D 数组

python - 使用 Python 解析 DOM 以提取数据

python - ZODB 中具有可变属性的对象的一致索引

algorithm - 整数数组中的最小移位,因此它们的差 >= k