两数之和

18 阅读1分钟

go 语言

暴力解法

时间复杂度 On2

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

用哈希表

时间复杂度 On,引入了哈希表,增加了空间复杂度 这个也是两层查找,一层正常遍历,一层在哈希表中查找,利用哈希表的快速查找特性

func twoSum(nums []int, target int) []int {
	myMap := make(map[int]int)
	length := len(nums)
	for i := 0; i < length; i++ {
		//判断是否存在满足值的元素
		val := target - nums[i]
		if j, ok := myMap[val]; ok {
			return []int{j, i}
		}
		//注意,是存值-下标,不是下标-值。可以不用存满
		myMap[nums[i]] = i

	}
	return []int{}
}