0
点赞
收藏
分享

微信扫一扫

【每日一练】Golang---leetcode算法----两数之和

彩虹_bd07 2022-03-22 阅读 32
golang
package main

import "fmt"

func main() {
	nums := []int{3, 2, 4}
	target := 6
	result := twoSum(nums, target)
	fmt.Println("符合条件的元素索引为", result)

	result2 := twoSum2(nums, target)
	fmt.Println("符合条件的元素索引为", result2)

}

//暴力算法:时间复杂度O(n^2);空间复杂度:1
func twoSum(nums []int, target int) []int {
	if len(nums) < 2 {
		return nil
	}
	for i := 0; i < len(nums); i++ {
		for j := i + 1; j < len(nums); j++ {
			if nums[i]+nums[j] == target {
				return []int{i, j}
			}
		}
	}
	return nil
}

//哈希表算法:时间复杂度O(n);空间复杂度:n -----在go里面,map数据结构就是哈希表的一种实现
func twoSum2(nums []int, target int) []int {
	if len(nums) < 2 {
		return nil
	}
	hash := make(map[int]int)
	for i := 0; i < len(nums); i++ {
		index, ok := hash[target-nums[i]]
		if ok {
			return []int{index, i}
		} else {
			hash[nums[i]] = i
		}
	}
	return nil
}

下图为两种算法耗时对比

 

 

举报

相关推荐

0 条评论