Given an array of integers, return indices of the two numbers such that they add up to a specific target.
    You may assume that each input would have exactly one solution, and you may not use the same element twice.
    Example:

    1. Given nums = [2, 7, 11, 15], target = 9,
    2. Because nums[0] + nums[1] = 2 + 7 = 9,
    3. return [0, 1].
    //用map辅助查找 时间复杂度O(n)
    func twoSum(nums []int, target int) []int {
        hash := make(map[int]int)
        for i := 0; i < len(nums); i++ {
            hash[nums[i]] = i
        }
    
        for i := 0; i < len(nums); i++ {
            temp := target - nums[i]
            if _, ok := hash[temp]; ok {
                if hash[temp] == i {
                    continue
                }
                return []int{i, hash[temp]}
            }
        }
    
        return nil
    }
    
    // 测试
    func main() {
        nums := []int{-6, 7, 11, 15}
        target := 9
        fmt.Println(twoSum(nums, target))
    
        nums = []int{2147483647, -2147483646, 11, 15}
        target = 1
        fmt.Println(twoSum(nums, target))
    }