兩數之和
阿新 • • 發佈:2020-07-27
題目:
給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解題思路:
雜湊表法
通過以空間換取速度的方式,我們可以將查詢時間從 O(n) 降低到 O(1)。雜湊表正是為此目的而構建的,它支援以近似恆定的時間進行快速查詢。
我們可以將每個元素的值和它的索引新增到雜湊表中,然後在遍歷時檢查每個元素對應的目標元素(target - nums[i])是否存在於表中。
注意⚠️,該目標元素不能是 nums[i] 本身!
//go func twoSum(nums []int, target int) []int { result := make([]int, 0) m := make(map[int]int) for i,k := range nums{ // 判斷map中是否存在key為[target - k]的值 if value,exist := m[target - k];exist && value != i{ // append:尾部追加元素 result = append(result,value) result = append(result, i) } m[k] = i } return result }