1. 顺序查找
顺序查找是数据查找算法中最简单直接的,暴力逐个比较的方式。对数据逐个匹配,数据量大时效率会很低,不适合大数据。
最容易理解的,最耗时的,最简单粗暴的方式。
执行用时:712 ms
内存消耗:21 MB
Swift实现
- 假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
func twoSum(_ nums:[Int], _ target:Int) -> [Int] {
var targetArray:[Int] = []
for i in 0 ..< nums.count - 1 {
for j in i+1 ..< nums.count {
if nums[i] + nums[j] == target {
targetArray.append(i)
targetArray.append(j)
}
}
}
return targetArray
}
这个实现是不严谨的,当有多对数满足目标条件时,会返回多个数。应该在满足条件后直接return。
- 如果没有上面假设的前提,则返回所有下标。
func twoSum(_ nums:[Int], _ target:Int) -> [[Int]] {
var targetArray:[[Int]] = []
for i in 0 ..< nums.count - 1 {
for j in i+1 ..< nums.count {
if nums[i] + nums[j] == target {
targetArray.append([i,j])
}
}
}
return targetArray
}
2. 哈希查找
哈希查找是数据查找中比较高效,快速的查询方法。
Swift实现
方式一:两次循环
执行用时:52 ms
内存消耗:22.5 MB
func twoSum(_ nums:[Int],_ target:Int) -> [Int] {
var hashMap:[Int:Int] = [:]
for (i , num) in nums.enumerated() {
hashMap[num] = i
}
for (i, num) in nums.enumerated() {
let temp = target - num
if hashMap.keys.contains(temp) && i != hashMap[temp] {
return [i, hashMap[temp]!]
}
}
return []
}