- 給定一個整數數組 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)
}