Advertisement
Alexxik

Untitled

Sep 13th, 2023 (edited)
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.54 KB | None | 0 0
  1. // MARK: - Новая задача
  2. // Дан массив чисел, нужно найти в нём максимальный по длине подотрезок со строго убывающими числами или строго возрастающими , вернуть пару индексов его концов.
  3.  
  4. // 12342178
  5.  
  6. func mostIncreasingDecreasing(_ s: String) -> (Int, Int) {
  7.     var s = Array(s).map{String($0)}.map{Int($0)!}
  8.    
  9.     var maxIndexes = (l:0, r:0)
  10.     var maxLength = -1
  11.    
  12.     var l = 0
  13.     var r = 1
  14.     var current = s[0]
  15.    
  16.     while r < s.count {
  17.        
  18.         while r < s.count && s[r] < current {
  19.             if r-l+1 > maxLength {
  20.                 maxLength = r-l+1
  21.                 maxIndexes.l = l
  22.                 maxIndexes.r = r
  23.             }
  24.             current = s[r]
  25.             r += 1
  26.         }
  27.         l = r - 1
  28.        
  29.         while r < s.count && s[r] > current {
  30.             if r-l+1 > maxLength {
  31.                 maxLength = r-l+1
  32.                 maxIndexes.l = l
  33.                 maxIndexes.r = r
  34.             }
  35.             current = s[r]
  36.             r += 1
  37.         }
  38.         l = r - 1
  39.        
  40.         if r < s.count && s[r] == current {
  41.             l = r
  42.             current = s[r]
  43.             r += 1
  44.         }
  45.     }
  46.    
  47.     print(s[maxIndexes.l...maxIndexes.r])
  48.     return maxIndexes
  49. }
  50.  
  51. //mostIncreasingDecreasing("1114")
  52. //mostIncreasingDecreasing("12344214689")
  53. //mostIncreasingDecreasing("4321678")
  54. mostIncreasingDecreasing("999876345678932111112345789")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement