• 主页
  • 架构
  • 编程语言
  • 数据存储
  • 网络
  • VMware
  • 服务器
  • 组网
  • AI
  • 算法系列
  • 设计模式
  • 读书笔记
  • 思考
  • 工具
  • 其它技术

  • 主页
  • 架构
  • 编程语言
  • 数据存储
  • 网络
  • VMware
  • 服务器
  • 组网
  • AI
  • 算法系列
  • 设计模式
  • 读书笔记
  • 思考
  • 工具
  • 其它技术

两数之和

2024-08-18

原题:
https://leetcode-cn.com/problems/two-sum/
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

分析:
1.可以使用减法,反向计算数值是否存在
2.为了快速找到数值,可以使用hashmap
3.因为提到每种输入只会对应一个答案,所以意味相同的数值最多有两个。
因此建两个hashmap,一个存放所有值(重复的放另一个hashmap里),一个存放第二次重复的值
4.题目没有说大小,先不管内存问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package main

import (
"fmt"
)

func twoSum(nums []int, target int) []int {
record1 := make(map[int]int)
recore2 := make(map[int]int)
res := make([]int,2)
//将nums中的值映射到hashmap中
for k,v := range nums {
if _,ok := record1[v];!ok{
record1[v] = k
}else{
recore2[v] = k
}
}
for number,index := range record1 {
diff := target - number
r1Index, ok1 := record1[diff]
if ok1 {
if r1Index != index {
res[0] = index
res[1] = r1Index
break
}else{
r2Index, ok2 := recore2[diff]
if ok2{
res[0] = index
res[1] = r2Index
break
}
}
}
}
if res[0] > res[1]{
res[0],res[1] = res[1],res[0]
}
return res
}
func main() {
nums := []int{2, 7, 11, 15}
target := 13
res := twoSum(nums,target)
fmt.Println(res)
}

扫一扫,分享到微信

微信分享二维码
浅谈微服务
TCP性能优化
© 2025 John Doe
Hexo Theme Yilia by Litten