Python求数组两数最大乘积算法压力测试缺失部分如何补充?
问题解决说明
运行无反应的两个核心缺失
- 缺失
main函数调用逻辑:Python不会自动执行名为main的函数,需要在脚本末尾主动触发 - 缺失
testGenerator函数实现:当前该函数仅返回None,无法生成测试用例,后续逻辑根本无法执行
额外需要修复的代码bug
你的两个解法本身也存在逻辑漏洞,就算补全测试逻辑也会大概率报错:
my_solution逻辑缺陷
判断第二大值时的
numbers[i] != numbers[index_1]条件错误,若数组存在两个相同最大值(如[5,5]),会跳过正确的第二大值,返回错误结果
未考虑负数场景:两个负数的乘积可能远大于正数乘积,当前仅找最大两个正数的逻辑完全不适用
naive_solution逻辑缺陷
初始
max_product设为0,若数组全为负数,两数乘积为正数但小于0时,会错误返回0
补全后可运行的完整代码
import random def my_solution(numbers): # 如果你仅需要测试非负整数场景,保留原逻辑只修改第二重循环的判断条件即可 # 以下为兼容正负整数的通用解法 if len(numbers) < 2: raise ValueError("数组长度至少为2") max1 = max2 = float('-inf') min1 = min2 = float('inf') for num in numbers: # 更新最大值序列 if num > max1: max2 = max1 max1 = num elif num > max2: max2 = num # 更新最小值序列 if num < min1: min2 = min1 min1 = num elif num < min2: min2 = num return max(max1 * max2, min1 * min2) def naive_solution(numbers): if len(numbers) < 2: raise ValueError("数组长度至少为2") n = len(numbers) max_product = float('-inf') # 修复初始值错误 for first in range(n): for second in range(first + 1, n): current_product = numbers[first] * numbers[second] if current_product > max_product: max_product = current_product return max_product def testGenerator(): # 生成长度2-100、数值范围-1000到1000的随机测试用例 length = random.randint(2, 100) return [random.randint(-1000, 1000) for _ in range(length)] def main(): test_count = 1000 for i in range(test_count): test_case = testGenerator() correct_answer = naive_solution(test_case) my_answer = my_solution(test_case) assert my_answer == correct_answer, f"测试失败用例:{test_case},预期结果{correct_answer},实际结果{my_answer}" print(f"共通过{test_count}条测试用例") # 主动触发主逻辑 if __name__ == "__main__": main()
运行效果
补全后运行脚本,若所有测试用例通过,会输出共通过1000条测试用例,如果测试不通过会直接抛出断言错误,给出对应的失败用例信息。
内容的提问来源于stack exchange,提问作者Leoucl
相关产品推荐
相关产品推荐

