LeetCode с Kotlin. 2 Сумма


Введение

  • В этой серии я буду рассказывать об общих решениях LeetCode в Kotlin.

Видеоверсия

  • YouTube

Код на GitHub

  • GitHub

Две суммы по Leetcode

  • LeetCode

Трудность

  • EASY

Временная сложность решения

  • O(N)

Решение на языке Kotlin

fun twoSum(nums: IntArray, target: Int): IntArray {
      val map = HashMap<Int,Int>()
            for(item in nums.indices){
                val partner = target - nums[item]
                if(map.containsKey(partner)){

                    val returnedArray = intArrayOf(map[partner]!!,item)
                    return returnedArray

                }else{
                    map[nums[item]] = item
                }

            }
            throw IllegalArgumentException("NOTHING FOUND")
    }
}

Вход в полноэкранный режим Выход из полноэкранного режима

Объяснение

  • Код на языке Kotlin иногда может быть немного странным, поэтому давайте пройдемся по нему построчно. Сначала начнем с IntArray, это называется примитивный массив. В Kotlin есть специальные классы, которые представляют массивы примитивных типов, что экономит нам несколько строк кода (спасибо Kotlin).

    • На самом деле HashMap — это просто Java HashMap, если мы посмотрим на исходный код Kotlin ЗДЕСЬ, то увидим, что он использует стандартный java.util.HashMap для реализации хэш-карт. Если вам интересно, что такое карта хэшей, то это совсем другая тема. Но просто знайте, что это структура данных, которая позволяет нам хранить элементы в парах ключ-значение, и мы можем обращаться к ним в постоянном времени. Вы можете думать об этом как о причудливом массиве.
    • Далее мы перебираем массив nums и можем сделать это с помощью for(item in nums.indices), что дает нам IntRange и позволяет нам выполнять итерацию, как в базовом цикле Java for. Подробнее о диапазонах читайте ЗДЕСЬ
    • Далее мы получаем, val partner = target - nums[item], partner — это то, что мы на самом деле ищем. Это дополнительное число, которое в сумме даст нам нашу цель.
    • Далее мы проверяем, содержит ли наша карта партнера: if(map.containsKey(partner)). Если наша карта содержит партнера, значит, у нас есть то, что мы хотим, поэтому мы можем вернуть новый массив int с нужными индексами следующим образом: intArrayOf(map[partner]!!!,item). item — это текущий индекс массива nums.
    • Если if(map.containsKey(partner)) равен false, то мы добавляем текущее значение в массив нашей карты, map[nums[item]] = item. Этот код может выглядеть странно, потому что он похож на индексирование, однако мы не индексируем. map[nums[item]] = item — это то же самое, что и map.set(nums[item],item).
    • Наконец, если мы ничего не нашли, мы просто бросаем исключение throw IllegalArgumentException("NOTHING FOUND").

Заключение

  • Спасибо, что нашли время, чтобы прочитать эту статью в моем блоге. Если у вас возникли вопросы или проблемы, пожалуйста, комментируйте их ниже или свяжитесь со мной в Twitter.

Оцените статью
devanswers.ru
Добавить комментарий