leetcode之283移動零Golang
阿新 • • 發佈:2020-09-14
我覺得我們需要考慮兩種情況:
-
陣列中不存在重複元素
-
陣列中存在重複元素
當陣列中存在重複元素,並且target
剛好是這兩個元素的和,那麼我們的返回結果應該是兩個相同元素的下標,甚至如果這樣相同的元素有很多個,那麼我只需要返回前兩個相同的元素就可以了。
本題使用雜湊來實現,定義雜湊為map[int][]int
,鍵為陣列中元素的值,值為他們的下標,因為相同的元素可能會有多個,所以使用一個數組來儲存他們的下標
演算法
-
遍歷陣列,將陣列元素的值作為
map
的鍵,將元素的下標存入值中(注意,值是一個[]int
的陣列) -
第二次遍歷陣列,遍歷到的元素的值為
value
-
如果
value==target-value
target
,那麼就看map
值的那個陣列是否長度大於等於2,如果是就直接返回這個陣列的前兩個元素 -
如果
value!=target-value
,說明了兩個相同的value
不能得到這個target
,就只需要map
中鍵target-value
對應的值的陣列長度大於等於1就可以了,然後返回當前遍歷的下標和map
中陣列的第一個值就可以了
-
func twoSum(nums []int, target int) []int { numsMap := make(map[int][]int) for index, value := range nums { numsMap[value] = append(numsMap[value], index) } for index, value := range nums { // 兩個元素相等的情況下,陣列nums中必須要有兩個元素才行 if value*2 == target { if len(numsMap[value]) > 1 { return numsMap[value][:2] } } else { // 連個元素不相等 if len(numsMap[target-value]) > 0 { return append(numsMap[target-value], index) } } } return []int{} }