Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - 2 пары, произведение которых минимально
- /*
- "Дана последовательность целых чисел. Необходимо найти минимально возможное произведение пары элементов
- Примеры:
- {9, 4, 2, 5, 3} -> 6
- {-1, -2, 3, 4} -> -8
- {-1, -2, -3, -4} -> 2
- */
- // Решение
- // Мнимальное произведение получается когда:
- // 1) оба - Минимальные положительные
- // 2) Большее по модулю отрицательное и максимальное положительное
- // 3) оба - Наибольшие отрицательные
- func maxProduct(_ nums: [Int]) -> Int {
- func findSecondMinValue(array: [Int]) -> (Int, Int) {
- var min = Int.max
- var secondMin = Int.max
- for value in array {
- if value <= min {
- secondMin = min
- min = value
- } else if value < secondMin {
- secondMin = value
- }
- }
- return (min, secondMin)
- }
- func findSecondMaxValue(array: [Int]) -> (Int, Int) {
- var max = -Int.max
- var secondMax = -Int.max
- for value in array {
- if value >= max {
- secondMax = max
- max = value
- } else if value > secondMax {
- secondMax = value
- }
- }
- return (max, secondMax)
- }
- var result = 0
- var isPositive = false
- var isNegative = false
- for value in nums {
- if value < 0 {
- isNegative = true
- } else {
- isPositive = true
- }
- }
- if isPositive == true && isNegative == true {
- result = nums.min()! * nums.max()!
- } else if isPositive == true && isNegative == false {
- let (min, secondMin) = findSecondMinValue(array: nums)
- result = min * secondMin
- } else {
- let (max, secondMax) = findSecondMaxValue(array: nums)
- result = max * secondMax
- }
- return result
- }
- maxProduct([-1, -2, -3, -4])
- maxProduct([-1, -2, 3, 4])
- maxProduct([0, 1, 4, 5, -1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement