Advertisement
Alexxik

Untitled

Sep 9th, 2023 (edited)
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.06 KB | None | 0 0
  1. // MARK: - 487. Max Consecutive Ones II
  2. // Given a binary array nums, return the maximum number of consecutive 1's in the array if you can flip at most one 0.
  3. // ex1
  4. // Input: nums = [1, 0, 1, 1, 0, 1] - Можем поменять на 1 первый ноль
  5. // Output: 4
  6.  
  7. // ex2
  8. // Input: nums = [1, 0, 1, 1, 0, 1]
  9. // Output: 4
  10.  
  11. // Решается через скользящее окно
  12.  
  13. func findMaxConsecutiveOnes(_ nums: [Int]) -> Int {
  14.    
  15.     var maxLength = 0
  16.     var countZeros = 0
  17.     var l = 0
  18.    
  19.     for r in 0..<nums.count {
  20.         if nums[r] == 0 {
  21.             countZeros += 1
  22.         }
  23.        
  24.         while countZeros == 2 {
  25.  
  26.             // сначала проверяем потом инкрементим, так как l может стоять на 0, мы сдвинем с 0 и не проверим
  27.             if nums[l] == 0 {
  28.                 countZeros -= 1
  29.             }
  30.             l += 1
  31.         }
  32.         maxLength = max(maxLength, r-l+1)
  33.     }
  34.     return maxLength
  35. }
  36.  
  37. findMaxConsecutiveOnes([0, 0, 1, 1, 0, 1, 0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement