Python 实现find_max_sum方法,该方法可以有效地减少所用时间
实现find_max_sum方法,该方法根据使用的时间高效地返回给定正数列表中任意两个元素的最大和 这是我对给定问题的解决方案,但是它没有通过测试用例,尽管答案是正确的 测试用例没有描述性,只是说明了以下内容:Python 实现find_max_sum方法,该方法可以有效地减少所用时间,python,python-3.x,Python,Python 3.x,实现find_max_sum方法,该方法根据使用的时间高效地返回给定正数列表中任意两个元素的最大和 这是我对给定问题的解决方案,但是它没有通过测试用例,尽管答案是正确的 测试用例没有描述性,只是说明了以下内容: 小名单 性能问题 不确定平台在寻找什么 问题:解决问题的更有效方法是什么? def find_max_sum(numbers): return max(numbers) + max((num for num in numbers if num < max(numbers))
def find_max_sum(numbers):
return max(numbers) + max((num for num in numbers if num < max(numbers)))
print(find_max_sum([5, 9, 7, 11]))
def find_max_sum(数字):
返回max(numbers)+max(如果num
您可以迭代列表并维护两个变量,即max\u num和sec\u max,然后返回它们的总和
def find_max_sum(numbers):
max_num=numbers[0]
sec_max=float('-inf')
for i in numbers:
if i>max_num:
sec_max=max_num
max_num=i
elif i>sec_max:
sec_max=i
return max_num+sec_max
时间复杂度O(N)
编辑:正如@Mario Khoury正确指出的,我已经用初始化的sec_max将代码更新为负无穷大,以防数组的第0个元素变成max。您可以迭代列表并维护两个变量,即max_num和sec_max,然后返回它们的总和
def find_max_sum(numbers):
max_num=numbers[0]
sec_max=float('-inf')
for i in numbers:
if i>max_num:
sec_max=max_num
max_num=i
elif i>sec_max:
sec_max=i
return max_num+sec_max
时间复杂度O(N)
编辑:正如@Mario Khoury正确指出的,我已经用初始化的sec_max将代码更新为负无穷大,以防数组的第0个元素变成最大值。python中的函数max()在O(n)的情况下具有时间复杂性
在您的代码中,您正在max函数中添加for循环,因此复杂性将为O(n^2)
我建议在列表中找到两个最大的数字,如下所示:
MAX = max(numbers)
MAX1 = float('-inf')
For i in range (len (numbers)) :
If MAX1 < numbers[i] and numbers[i]! = MAX:
MAX1 =numbers[i]
MAX=MAX(数字)
MAX1=浮点('-inf')
对于范围内的i(len(数字)):
如果MAX1<数字[i]和数字[i]!=最大值:
MAX1=数字[i]
PS:如果列表可以有两个相等的数字,则可以添加一个条件,以检查MAX是否存在两次
在您的代码中,您正在max函数中添加for循环,因此复杂性将为O(n^2)
我建议在列表中找到两个最大的数字,如下所示:
MAX = max(numbers)
MAX1 = float('-inf')
For i in range (len (numbers)) :
If MAX1 < numbers[i] and numbers[i]! = MAX:
MAX1 =numbers[i]
MAX=MAX(数字)
MAX1=浮点('-inf')
对于范围内的i(len(数字)):
如果MAX1<数字[i]和数字[i]!=最大值:
MAX1=数字[i]
PS:如果列表中可以有两个相等的数字,则可以添加一个条件,以检查最大值是否存在2次如果列表中的第一个元素是最大值,则会出现最大值2次,并最终得到错误的结果。您可以使用float('-inf')启动变量,如果列表的第一个元素是max,那么在这种情况下,您将拥有max 2次,并最终得到错误的结果。可以使用float('-inf')启动变量