题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
https://leetcode.cn/problems/two-sum/
解法
解法1. 暴力
时间复杂度为O(n^2),空间复杂度为O(1)
func twoSum(nums []int, target int) []int {
var n = len(nums)
for i := 0; i < n; i++{
for j := i + 1; j < n; j++{
if nums[i] + nums[j] == target{
return []int{i,j}
}
}
}
return nil
}
执行用时:24 ms, 在所有 Go 提交中击败了28.12%的用户
内存消耗:3.4 MB, 在所有 Go 提交中击败了98.90%的用户
解法2. 哈希
时间复杂度为O(n),空间复杂度为O(n)
func twoSum(nums []int, target int) []int {
var numMap = make(map[int]int)
for i, num := range nums{
if j, ok := numMap[target-num]; ok{
return []int{i,j}
}
numMap[num] = i
}
return nil
}
执行用时:4 ms, 在所有 Go 提交中击败了95.00%的用户
内存消耗:4.1 MB, 在所有 Go 提交中击败了42.96%的用户