我有一个数字子数组,我想找到包含最小数字的子数组。
data = [
[10, 11],
[93, 3], # This is the required sub-array because 3 is smaller than all the other numbers
[33, 44, 55]
]
# tag the smallest item from each sub-array onto the front, creating a new main array
extendedData = map(lambda x:(min(x), x),data)
# use the fact that when given an array, min() will examine the first element
(smallestValueFromRow, rowContainingSmallestValue) = min(extendedData)
print(rowContainingSmallestValue)下面是一个有用的示例:https://www.online-python.com/7O5SceGoEF
有没有一种更有效的记忆方式来解决这个问题?实际上,数组和子数组可能很大,我假设map函数复制了data数组,并应用了映射。
发布于 2022-08-30 05:30:34
您的第一个解决方案,使用map,不应该需要超过常量的额外空间,因为map返回一个生成器-它实际上不会做任何事情,直到您迭代它。
但是,您可以通过更少的输入有效地完成相同的任务:
print(min(data, key=min))发布于 2022-08-30 04:36:09
下面是一个将返回包含最小值的第一个列表的解决方案:
data = [
[10, 11],
[93, 3],
[33, 44, 55]
]
smallestNumbersFromEachSubList = [min(subList) for subList in data]
subListContainingTheSmallestNumber = data[smallestNumbersFromEachSubList.index(min(smallestNumbersFromEachSubList))]
print(subListContainingTheSmallestNumber)这将返回:
[93, 3]发布于 2022-08-30 05:11:57
由于您要求一个内存高效的实现,此方法将是常量空间。
min_num = min_idx = float("inf")
for i, nums in enumerate(data):
local_min = min(nums)
if local_min < min_num:
min_idx = i
min_num = min(min_num, local_min)
print(data[min_idx])https://stackoverflow.com/questions/73537082
复制相似问题