审题:

只有一种组合的解决方案
同一元素不能使用2次

解法:

  1. Brute Force
  2. Two-pass Hash Table
  3. One-pass Hash Table

1. 遍历2次数组,寻找满足条件的元素下标

func twoSum(nums []int, target int) (result []int) {

	for index, num := range nums {
		for sIndex, sNum := range nums {
			if num+sNum == target && index != sIndex {
                result = []int{index, sIndex}
                return    
            }   
		}
    }
	return
}

2. Two-pass Hash Table

func twoSum(nums []int, target int) []int {

	m := make(map[int]int)
	for i, v := range nums {
		m[v] = i
	}

	for i, v := range nums {
		result := target - v
		if index, ok := m[result]; ok && index != i {
			return []int{i, index}
		}
	}

	return nil
}

3. One-pass Hash Table

func twoSum(nums []int, target int) []int {
	m := make(map[int]int)

	for i, n := range nums {
		if index, ok := m[n]; ok && index != i {
			return []int{index, i}
		} else {
			// amazing!!!
			m[target-n] = i
		}
	}

	return nil
}