标签:重复 return 直接 value targe app tco == 相同
我觉得我们需要考虑两种情况:
数组中不存在重复元素
数组中存在重复元素
当数组中存在重复元素,并且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{} }
标签:重复 return 直接 value targe app tco == 相同
原文地址:https://www.cnblogs.com/gyyyl/p/13666740.html