1. 两数之和

1. 顺序查找

顺序查找是数据查找算法中最简单直接的,暴力逐个比较的方式。对数据逐个匹配,数据量大时效率会很低,不适合大数据。

最容易理解的,最耗时的,最简单粗暴的方式。

执行用时:712 ms
内存消耗:21 MB

在这里插入图片描述

Swift实现

  1. 假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
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。

  1. 如果没有上面假设的前提,则返回所有下标。
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 []
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值