NOTE
两数之和
两数之和 的 LeetCode 解题笔记。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的 假设给出的数组中只存在唯一解 例如: 给出的数组为 {20, 70, 110, 150},目标值为90 输出 index1=1, index2=2
2. 思路
对比和为S的两个数字.md,这个数组没有排序
- 思路一
- 暴力法
- 固定一个数字,遍历查找另一个数字
- 思路二
- 遍历一遍放入set中
- 再遍历一遍查看另一个数字是否再map中
3. 实现
3.1. 暴力法
//时间:O(N²)
//空间:O(1)
func twoSum(numbers []int, target int) []int {
if len(numbers) == 0 {
return nil
}
res := make([]int, 0)
for i := 0; i < len(numbers); i++ {
for j := i + 1; j < len(numbers); j++ {
if numbers[i]+numbers[j] == target {
res = append(res, i+1, j+1)
return res
}
}
}
return res
}
3.2. map
//时间:O(N)
//空间:O(N)
func twoSum2(numbers []int, target int) []int {
if len(numbers) == 0 {
return nil
}
res := make([]int, 0)
m := make(map[int]int, 0)
for i := 0; i < len(numbers); i++ {
m[numbers[i]] = i
}
for i := 0; i < len(numbers); i++ {
j, ok := m[target-numbers[i]]
if j == i {
continue
}
if ok {
res = append(res, i+1, j+1)
return res
}
}
return res
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看