Примечания LeetCode [37]

Проблема



Интуиция

Идея состоит в том, чтобы свести задачу 3Sum к задаче Две суммы. Учитывая сумму двух чисел, третье число должно быть отрицательным от данной суммы. Следовательно, целью для каждой суммы двух является отрицательное число каждого элемента массива.

Выполнение

class Solution {
    private lateinit var map: MutableMap<Int, Int>

    fun threeSum(nums: IntArray): List<List<Int>> {
        map = mutableMapOf()
        nums.forEachIndexed { index, num ->
            map[num] = index
        }
        val result = mutableSetOf<List<Int>>()
        for (i in nums.indices) {
            val target = -nums[i]
            for (j in i + 1 until nums.size) {
                val num = nums[j]
                val remains = target - num
                val k = map[remains]
                k?.let { 
                    if (k != i && k > j) {
                        result.add(listOf(-target, num, remains).sorted())
                    }
                }
            }
        }
        return result.toList()
    }
}

Анализ сложности

  • Временная сложность: O(n²)
  • Сложность пространства: O(n)