Advertisement
Alexxik

Untitled

Sep 18th, 2023
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.27 KB | None | 0 0
  1. // MARK: - 2 пары, произведение которых минимально
  2.  
  3. /*
  4.  "Дана последовательность целых чисел. Необходимо найти минимально возможное произведение пары элементов
  5.  Примеры:
  6.  {9, 4, 2, 5, 3} -> 6
  7.  {-1, -2, 3, 4} -> -8
  8.  {-1, -2, -3, -4} -> 2
  9.  */
  10.  
  11.  
  12. // Решение
  13. // Мнимальное произведение получается когда:
  14. // 1) оба - Минимальные положительные
  15. // 2) Большее по модулю отрицательное и максимальное положительное
  16. // 3) оба - Наибольшие отрицательные
  17.  
  18. func maxProduct(_ nums: [Int]) -> Int {
  19.    
  20.     func findSecondMinValue(array: [Int]) -> (Int, Int) {
  21.         var min = Int.max
  22.         var secondMin = Int.max
  23.        
  24.         for value in array {
  25.             if value <= min {
  26.                 secondMin = min
  27.                 min = value
  28.             } else if value < secondMin {
  29.                 secondMin = value
  30.             }
  31.         }
  32.         return (min, secondMin)
  33.     }
  34.    
  35.     func findSecondMaxValue(array: [Int]) -> (Int, Int) {
  36.         var max = -Int.max
  37.         var secondMax = -Int.max
  38.        
  39.         for value in array {
  40.             if value >= max {
  41.                 secondMax = max
  42.                 max = value
  43.             } else if value > secondMax {
  44.                 secondMax = value
  45.             }
  46.         }
  47.         return (max, secondMax)
  48.     }
  49.    
  50.    
  51.     var result = 0
  52.    
  53.     var isPositive = false
  54.     var isNegative = false
  55.    
  56.     for value in nums {
  57.         if value < 0 {
  58.             isNegative = true
  59.         } else {
  60.             isPositive = true
  61.         }
  62.     }
  63.    
  64.     if isPositive == true && isNegative == true {
  65.         result = nums.min()! * nums.max()!
  66.     } else if isPositive == true && isNegative == false {
  67.         let (min, secondMin) = findSecondMinValue(array: nums)
  68.         result = min * secondMin
  69.     } else {
  70.         let (max, secondMax) = findSecondMaxValue(array: nums)
  71.         result = max * secondMax
  72.     }
  73.    
  74.     return result
  75. }
  76. maxProduct([-1, -2, -3, -4])
  77. maxProduct([-1, -2, 3, 4])
  78. maxProduct([0, 1, 4, 5, -1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement