leetcode 1.两数之和

有两种思路:

  1. 使用暴力遍历, 复杂度的是 O(n ^2)
1
2
3
4
5
6
7
8
9
10
11
12

func twoSum(nums []int, target int) []int {
for i := 0; i < len(nums); i++ {
for j:= i+1; j < len(nums); j++ {
if nums[i] + nums[j] == target {
return []int{i, j}
}
}
}
return []int{}
}

  1. 使用哈希表,是O(n)
    使用哈希表需要注意的是, 这里需要判断idx 和idx2 不相同,因为是要找两个位置,不能取同一个位置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    func twoSum(nums []int, target int) []int {
    maps := make(map[int]int, len(nums))

    for idx, num := range nums {
    maps[num] = idx
    }

    for idx, num := range nums {
    if idx2, ok := maps[target-num]; ok && idx != idx2 { // 00 : 04 : 10 使用哈希表,需要注意的是,有可能使用了同一个idx
    return []int{idx, idx2}
    }
    }
    return []int{}
    }



leetcode 1.两数之和
https://leiqi.top/2024-08-21-64c0a1f316e6.html
作者
Lei Qi
发布于
2024年8月21日
许可协议