leetcode之283移动零Golang

时间:2020-09-18 01:08:02   收藏:0   阅读:38

解析

我觉得我们需要考虑两种情况:

当数组中存在重复元素,并且target刚好是这两个元素的和,那么我们的返回结果应该是两个相同元素的下标,甚至如果这样相同的元素有很多个,那么我只需要返回前两个相同的元素就可以了。

本题使用哈希来实现,定义哈希为map[int][]int ,键为数组中元素的值,值为他们的下标,因为相同的元素可能会有多个,所以使用一个数组来存储他们的下标

算法

代码

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{}
}

  

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!