天天看點

求:兩數之和

  • 給定一個整數數組 nums 和一個目标值 target,請你在該數組中找出和為目标值的那 兩個 整數,并傳回他們的數組下标。

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

是以傳回 [0, 1]

來源:力扣(LeetCode)

連結:https://leetcode-cn.com/problems/two-sum

著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

解題思路1:直接循環法

時間複雜度:O(N²)

空間複雜度:O(1)

fun twoSum(nums: IntArray, target: Int): IntArray {
        var a: Int
        var b: Int
        for (i in nums.indices) {
            a = nums[i]
            for (m in i + 1 until nums.size) {
                b = nums[m]
                if ((a + b) == target) {
                    return intArrayOf(i, m)
                }
            }
        }
        return intArrayOf(-1, -1)
    }
           

思路2 用空間換時間的方式

時間複雜度:O(N)

空間複雜度:O(N)

fun sum(nums: IntArray, target: Int): IntArray {

        val hashTable = Hashtable<Int, Int>()

        for (i in nums.indices) {
            if (hashTable.containsKey(target - nums[i])) {
                val first: Int = hashTable[target - nums[i]] as Int
                return intArrayOf(first, i)
            }
            hashTable[nums[i]] = i
        }

        return intArrayOf(-1, -1)
    }
           

繼續閱讀