// Нужно найти минимальный элемент в массиве.
// Сейчас всегда выдает очень большое число

func min(_ array: [Int]) -> Int {
    var minElement = Int.max

    for i in 0 ..< array.count {
        if (array[i] > minElement) {
            minElement = array[i]
        }
    }

    return minElement
}
// Степень тройки

func isPowerOfThree(_ n: Int) -> Bool {
    if n <= 0 {
        return false
    }

    var m = n

    while m % 3 == 0  {
        m /= 3
    }

    return n == 1
}
// Метод должен сортировать строку по возрастанию( abcde...z )
// Сейчас сортирует по убыванию

- (NSString *)sortedString:(NSString *)inputString {
   NSMutableArray *charArray = [NSMutableArray new];

   for (int i = 0; i < inputString.length; ++i) {
       [charArray addObject:[NSString stringWithFormat:@"%c", [inputString characterAtIndex:i]]];
   }

   NSString *resultString = [[charArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj2, id  _Nonnull obj1) {
       return [obj1 compare:obj2];
   }] componentsJoinedByString:@""];

   return resultString;
}
// Ищем, содержит ли массив повторяющиеся значения
// Сейчас не работает

func containsDuplicate(_ nums: [Int]) -> Bool {
    var set = Set<Int>()

    for num in nums {
        if (set.insert(num).inserted == false) {
            return false
        }
    }
    return true
}
// Нужно развернуть строку. 
// Сейчас из строки abcd получается строка dccd.

func reverseString(_ s: String) -> String {
    var helperString = Array(s.characters)
    let length = s.characters.count

    for i in 0 ..< (length / 2) {
        let rightIndex = length - i - 1
        let tmp = helperString[rightIndex]

        helperString[i] = tmp
        helperString[rightIndex] = helperString[i]
    }

    return String(helperString)
}
// Найти длину самой длинной увеличивающейся подпоследовательности.

func lengthOfLIS(_ nums: [Int]) -> Int {
    var lengths = [Int](repeatElement(1, count: nums.count))
    var maxLength = 0

    for i in 0 ..< nums.count {
        for j in 0 ..< i {
            if (nums[j] < nums[i]) {
                lengths[i] = max(lengths[i] + 1, lengths[j])
            }
        }
        maxLength = max(maxLength, lengths[i])
    }

    return maxLength
}
// Найти длину самой длинной подстроки без повторяющихся символов.

func lengthOfLongestSubstring(_ s: String) -> Int {
    let n = s.characters.count
    let charsString = s.utf8CString

    var set = Set<String>()
    var i = 0
    var j = 0
    var answer = 0

    while i < n && j < n {
        let currentCharRight = String(charsString[j])
        let currentCharLeft = String(charsString[i])

        if (set.contains(currentCharRight) == false) {
            set.insert(currentCharRight)
            answer = max(answer, j - i + 1)
            i += 1
        } else {
            set.remove(currentCharLeft)
            j += 1
        }
    }

    return answer
}