1. 题目
2.数据范围
3.思路
- 看数据范围,最简单的方式就是遍历,时间上也能过,最好写,两次循环,时间复杂度 O(n^2)
class Solution {
fun twoSum(nums: IntArray, target: Int): IntArray {
for((index,i) in nums.withIndex()){
for((index1,j) in nums.withIndex()){
if(index!=index1&&i+j==target){
return intArrayOf(index,index1)
}
}
}
return intArrayOf(0,0)
}
}
结果
阿巴,阿巴,写的很丑别介意
那么这里涉及到的知识点就是
- 数组
创建方式:
val arr = arrayOf(1, 2, 3)
数组的遍历
// 下标
for (item in array.indices) {
println("下标为==>" + item)
}
// 项的内容
for (item in array) {
println("项为==>" + item)
}
// 下标和项
for ((item,i) in array.withIndex()) {
println("项为==> $item;下标为==>$i")
}
array.forEach {
println("项的内容为:$it")
}
array.forEachIndexed { index, item ->
println("下标为:$index;项的内容为:$item")
}
4. 优化
优化思路就是对于每一个数x,我们只需要查找他的target-x在不在列表中就可以了,优化查找时间的话,我们很容易想到哈希表,理想情况下hashmap的操作都是O(1)的。
hashmap基本用法
// 创建一个空的HashMap
val hashMap = HashMap<String, Int>()
// 添加键值对
hashMap["key1"] = 1
hashMap["key2"] = 2
hashMap["key3"] = 3
// 获取值
val value = hashMap["key1"]
println(value) // 输出: 1
// 遍历HashMap
for ((key, value) in hashMap) {
println("Key: $key, Value: $value")
}
// 删除键值对
hashMap.remove("key2")
// 检查键是否存在
if (hashMap.containsKey("key2")) {
println("Key 'key2' exists")
} else {
println("Key 'key2' does not exist")
}
// 检查值是否存在
if (hashMap.containsValue(3)) {
println("Value '3' exists")
} else {
println("Value '3' does not exist")
}
// 获取HashMap的大小
val size = hashMap.size
println("HashMap size: $size")
代码
class Solution {
fun twoSum(nums: IntArray, target: Int): IntArray {
val map = HashMap<Int, Int>()
nums.forEachIndexed { i, value ->
if (map.containsKey(target - value)) {
val a=map[target - value]?:0
return intArrayOf(i, a)
} else {
map[value] = i
}
}
return intArrayOf(0, 0)
}
}
结果
很明显,使用哈希表就是用空间换时间的策略,不过为啥下面这种方式反而消耗内存更少呢?我猜测是因为数据范围太小本来就不占据多少内存,下面的方法更简洁存的过程值更少吧?(疑惑