美文网首页
twoSum Go写法

twoSum Go写法

作者: FredricZhu | 来源:发表于2020-04-11 13:24 被阅读0次
package main

import (
    "fmt"
)

/**
 * n的平方时间复杂度
*/
func twoSum(nums []int, target int) []int {
    res := make([]int, 0)
    breakTag := false
    for i:=0;i<len(nums);i++ {
        for j:=i+1;j<len(nums);j++ {
            if nums[i] + nums[j] == target {
                if i != j {
                    res = append(res, i)
                    res = append(res, j)
                    breakTag = true
                    break
                }
            }
        }
        if breakTag {
            break
        }
    }
    return res
}

/**
 * n时间复杂度, map设置成int切片的原因是避免重复元素
*/
func twoSum1(nums []int, target int) []int {
    res := make([]int, 0)
    m := make(map[int][]int, 0)
    for i:=0; i<len(nums); i++ {
        _, ok := m[nums[i]]
        if !ok {
            m[nums[i]] = make([]int, 0)
        }
        m[nums[i]] = append(m[nums[i]], i)
    }
    
    
    breakFlag := false
    for i:=0; i<len(nums); i++ {
        key := target - nums[i]
        idxArr, ok := m[key]
        if ok {
            for _, j := range(idxArr) {
                if j!=i {
                    res = append(res, i)
                    res = append(res, j)
                    breakFlag = true
                    break
                }
            }
        }
        
        if breakFlag {
            break
        }
        
    }
    return res
}


func main() {
    nums := make([]int, 0)
    nums = append(nums, 1, 2, 3, 4,5,6,7, 8,9)
    res := twoSum1(nums, 5)
    fmt.Println(res)
}

相关文章

网友评论

      本文标题:twoSum Go写法

      本文链接:https://www.haomeiwen.com/subject/xxdymhtx.html