fork download
  1. from heapq import heapreplace
  2. from functools import reduce
  3. from operator import mul
  4. from bisect import insort
  5.  
  6. def product(nums):
  7. return reduce(mul, nums)
  8.  
  9. def max_product_insert(numbers):
  10. positive = [0, 0, 0]
  11. negative = [0, 0]
  12. for x in numbers:
  13. if x > positive[2]:
  14. index = next(i for i, v in enumerate(positive) if x > v)
  15. positive.insert(index, x)
  16. del positive[3]
  17. elif x < negative[1]:
  18. index = next(i for i, v in enumerate(negative) if x < v)
  19. negative.insert(index, x)
  20. del negative[2]
  21.  
  22. return max(product(positive[:1] + negative), product(positive))
  23.  
  24. def max_product_insort(numbers):
  25. positive = [0, 0, 0]
  26. negative = [0, 0]
  27. for x in numbers:
  28. if x > positive[0]:
  29. insort(positive, x)
  30. del positive[0]
  31. elif x < negative[-1]:
  32. insort(negative, x)
  33. del negative[2]
  34.  
  35. return max(product(positive[-1:] + negative), product(positive))
  36.  
  37. def max_product_heap(numbers):
  38. positive = [0, 0, 0]
  39. negative = [0, 0]
  40. for x in numbers:
  41. if x > positive[0]:
  42. heapreplace(positive, x)
  43. elif x < 0 and -x > negative[0]:
  44. heapreplace(negative, -x)
  45.  
  46. return max(product(positive[-1:] + negative), product(positive))
  47.  
  48. print(max_product_insert([6, -1, -1, -2, 0]))
  49. print(max_product_insort([6, -1, -1, -2, 0]))
  50. print(max_product_heap([6, -1, -1, -2, 0]))
  51.  
Success #stdin #stdout 0s 47720KB
stdin
Standard input is empty
stdout
12
12
12