题目
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。
但是,数组中同一个元素不能使用两遍。
示例
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法一:
/*
两次循环:
时间复杂度:O(n^2)
*/
func way1(nums []int, target int) (ret []int) {
startTime := time.Now().Nanosecond()
cnt := len(nums)
for i := 0; i < cnt; i++ {
for j := 0; j < cnt; j++ {
if nums[i]+nums[j] == target && i != j {
ret = []int{i, j}
break
}
}
}
endTime := time.Now().Nanosecond()
fmt.Println("way1 consume: ", endTime-startTime)
return ret
}
方法二:用空间换时间
/*
一次循环+字典:
时间复杂度:O(n^2)
*/
func way2(nums []int, target int) (ret []int) {
startTime := time.Now().Nanosecond()
numsMap := make(map[int]int, 0)
for ix, num := range nums {
numsMap[num] = ix
}
for ix, num := range nums {
if _, ok := numsMap[target-num]; ok && ix != numsMap[target-num] {
ret = []int{ix, numsMap[target-num]}
}
}
endTime := time.Now().Nanosecond()
fmt.Println("way2 consume: ", endTime-startTime)
return ret
}
结果:
