码迷,mamicode.com
首页 > 移动开发 > 详细

leetcode之283移动零Golang

时间:2020-09-18 01:08:02      阅读:38      评论:0      收藏:0      [点我收藏+]

标签:重复   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{}
}

  

 

leetcode之283移动零Golang

标签:重复   return   直接   value   targe   app   tco   ==   相同   

原文地址:https://www.cnblogs.com/gyyyl/p/13666740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!