LeetCode算法题1--两数之和
2020-02-26 本文已影响0人
懇_
先贴上答案
Kotlin:
fun twoSum(nums: IntArray, target: Int): IntArray {
val map = hashMapOf<Int, Int>()
for (i in nums.indices) {
var complement = target - nums[i]
if (map.containsKey(complement)) {
return intArrayOf(map[complement]!!.toInt(), i)
}
map[nums[i]] = i
}
return intArrayOf()
}
个人错误思路:
看到题目 nums = [2, 7, 11, 15], target = 9
想通过用 if (a in b)的方法去做 ==》 if( (value - nums[ i ]) in nums )
后面发现 如果 出现 nums = [3,3], target = 6 这种情况 我就没法处理了
正确思路
- 创建一个hashmap存储值
- 循环下标
- 得出每一个值所需要的另一半 ( 7 = 9 -2 )
- 通过containsKey方法在Map中找出是否有自己所需要的值,如果不存在就把自己和自己在IntArray中对应的值存入Map
例如 :
var complement = target - nums[i] // i = 1 complement = 2 map = { Key = 4, Value = 0 }
if (map.containsKey(complement)) {
return intArrayOf(map[complement]!!.toInt(), i) // intArrayOf( 0 , 1 )
}
小笔记
- indices —— 返回整个数组的范围
- containsKey —— 搜索数值中的Key 返回Boolean类型