Advertisement
Alexxik

Untitled

Sep 16th, 2023 (edited)
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.09 KB | None | 0 0
  1. // MARK: - Найти МИНИМАЛЬНЫЙ подотрезок суммой X
  2. // Решение - префиксная сумма
  3.  
  4. // MARK: - Найти МИНИМАЛЬНЫЙ подотрезок суммой X
  5.  
  6. func subarraySumXMIN(_ nums: [Int], _ x: Int) -> [Int] {
  7.     var prifix = [0:-1]
  8.     var sum = 0
  9.     var indeces = (start: -1, end: -1)
  10.     var minLength = Int.max
  11.    
  12.     for r in 0..<nums.count {
  13.         sum += nums[r]
  14.        
  15.         var prefixToDelete = sum - x
  16.        
  17.         if prifix[prefixToDelete] != nil {
  18.             // не забывай про +1
  19.             let start = prifix[prefixToDelete]! + 1
  20.             let end = r
  21.             if end - start + 1 < minLength {
  22.                 minLength = end - start + 1
  23.                 indeces.end = end
  24.                 indeces.start = start
  25.             }
  26.            
  27.         }
  28.         prifix[sum] = r
  29.     }
  30.     return minLength == Int.max ? [-1] : Array(nums[indeces.start...indeces.end])
  31. }
  32.  
  33. //subarraySumXMIN([1,0,5,6, 0, 0, 0, 1, 1, 1, 1, 1, 1,0,0, 1, 1, 1, 1, 1, 3], 11)
  34. subarraySumXMIN([1,2,3,4,5], 12)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement