最开始我想的比较简单,采用了一个嵌套循环的解法:
package main /** * * @param numbers int整型一维数组 * @param target int整型 * @return int整型一维数组 */ func twoSum(numbers []int, target int) []int { // write code here for i := 0; i < len(numbers)-1; i++ { for j := i + 1; j < len(numbers); j++ { if numbers[i]+numbers[j] == target { return []int{i + 1, j + 1} } } } return []int{} }
但是这道题超时了,题目要求的时间复杂度是O(nlogn),这个解法明显不行。
尝试另外一种解法,最坏的情况只用遍历一次数组就能得到答案:
package main /** * * @param numbers int整型一维数组 * @param target int整型 * @return int整型一维数组 */ func twoSum(numbers []int, target int) []int { // write code here var m = make(map[int]int) for i := 0; i < len(numbers); i++ { v, ok := m[target-numbers[i]] if ok { return []int{v + 1, i + 1} } else { m[numbers[i]] = i } } return []int{} }
实际的求解时间只有62ms。