我正在试着在一个数字列表中找到第二大数字。在有重复的情况下,第二个最大的数字将是按值计算的第二大数字。例如,在列表3、2、7、7、5中,第二大数字应该是5。
所以这就是我为了解决这个问题所做的。
def find_second_number(nums):
m1 = sorted(nums)[-1]
m2 = sorted(nums)[-2]
if m1 == m2:
find_second_number(sorted(nums)[:-1])
else:
return m2
return m2
arr = [x for x in (input().split())]
print(find_second_number(arr))我不明白的是,返回的是哪个m2。我猜当arr = 3,2,7,7,5时,会有两次find_second_number()的递归调用,然而,我搞不懂哪个函数实例应该返回m2。
发布于 2021-04-16 18:03:30
我不明白的是,返回的是哪个m2。
它始终是第一次调用find_second_number时执行上下文的m2。无论find_second_number的递归调用返回什么,...您的代码会忽略它。
因此,要修复它,请执行以下操作:
if m1 == m2:
return find_second_number(sorted(nums)[:-1])
else:
return m2但是,您的代码会多次调用sorted。这使得它的效率非常低。即使只调用一次它也会给你的算法带来O(log)的时间复杂度,而它可以用线性时间复杂度来完成。
例如,可以这样做:
def find_second_number(nums):
greatest = max(nums)
return max(m for m in nums if m < greatest)https://stackoverflow.com/questions/67122306
复制相似问题