Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - Новая задача
- // Дан массив чисел, нужно найти в нём максимальный по длине подотрезок со строго убывающими числами или строго возрастающими , вернуть пару индексов его концов.
- // 12342178
- func mostIncreasingDecreasing(_ s: String) -> (Int, Int) {
- var s = Array(s).map{String($0)}.map{Int($0)!}
- var maxIndexes = (l:0, r:0)
- var maxLength = -1
- var l = 0
- var r = 1
- var current = s[0]
- while r < s.count {
- while r < s.count && s[r] < current {
- if r-l+1 > maxLength {
- maxLength = r-l+1
- maxIndexes.l = l
- maxIndexes.r = r
- }
- current = s[r]
- r += 1
- }
- l = r - 1
- while r < s.count && s[r] > current {
- if r-l+1 > maxLength {
- maxLength = r-l+1
- maxIndexes.l = l
- maxIndexes.r = r
- }
- current = s[r]
- r += 1
- }
- l = r - 1
- if r < s.count && s[r] == current {
- l = r
- current = s[r]
- r += 1
- }
- }
- print(s[maxIndexes.l...maxIndexes.r])
- return maxIndexes
- }
- //mostIncreasingDecreasing("1114")
- //mostIncreasingDecreasing("12344214689")
- //mostIncreasingDecreasing("4321678")
- mostIncreasingDecreasing("999876345678932111112345789")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement