AlexG2230954

27. Кадане. Умножение

Jun 23rd, 2021 (edited)
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.53 KB | None | 0 0
  1. nums = [6, -3, -2, -2]
  2.  
  3. max_at = nums[0] # макс. значение подпоследовательности, конец которой - цифра, на которой мы ща стоим
  4. min_at = nums[0] # мин. значение подпоследовательности, конец которой - цифра, на которой мы ща стоим
  5. max_value = max_at # глобальный максимум
  6.  
  7. for num in nums[1:]:
  8.     prev_max_at = max_at; prev_min_at = min_at
  9.     max_at = max(num, num * prev_min_at, num * prev_max_at)
  10.     min_at = min(num, num * prev_min_at, num * prev_max_at)
  11.     max_value = max(max_value, max_at)
  12.  
  13. print(max_value)
  14.  
  15.  
  16. """
  17.   Вся суть заключается в том, что мы проходимся по цифрам списка и на основе предыдущих результатов
  18.   Выясняем локально самое выгодное значение (то есть какое самое большое произведение будет до числа n?).
  19.   Но есть один нюанс - отрицательное число. Тут нам поможет минимальное значение. Ведь если до этого у нас
  20.   встречалось отрицательное число, то оно тоже будет отрицательным. А при отрицательное * отрицательное выходит
  21.   положительное + оно может стать еще и максимумом
  22. """
Add Comment
Please, Sign In to add comment