栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Leetcode刷题-1.两数之和-Go/Python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode刷题-1.两数之和-Go/Python

方法一-暴力枚举

使用嵌套for循环

时间复杂度为O(),最坏的情况下数组中任意2个元素都要匹配一次。

空间复杂度为O(1),只用到常数个临时变量。

GO语言 

运行结果:

执行用时内存消耗
28 ms3.4 MB
func twoSum(nums []int, target int) []int {
    arrlen := len(nums)
    for i := 0;i < arrlen ;i++{
		for j := i+1;j < arrlen ;j++{
            if nums[i] + nums[j] == target{
                resp := []int{i, j}
                return resp
            }
        }
	}
    return nil 
}
Python

运行结果:

执行用时内存消耗
3000+ ms15+ MB
def twosum(nums, target):
    listLen = len(nums)
    for i in range(0, listLen):
        for j in range(i+1, listLen):
            if nums[i] + nums[j] == target:
                return [i, j]
    return []

方法二-查找表法

优化思路

  • 遍历时记录一些信息,以省去一次遍历。以空间换时间。
  • 记录已遍历的值和下标,可借助查找表实现。
  • 每次遍历,x为遍历的元素。判断target - x的值是否在查找表中,如果存在则返回此值的下标和当前元素下标。
GO语言

运行结果:

执行用时内存消耗
4 ms4.2 MB
func twoSum(nums []int, target int) []int {
    arrlen := len(nums)
    var map1 = make(map[int]int)                    //创建一个Map
    for i := 0;i < arrlen ;i++{
//判断Map中是否存在target-num[i]的key。存在则返回key的下标和当前元素下标;不存在则将当前元素和下标存入Map
        if _, ok := map1[target - nums[i]]; ok {    
            return []int{map1[target - nums[i]], i}
        }
        map1[nums[i]] = i
	}
    return nil 
}
Python

运行结果:

执行用时内存消耗
32 ms15.9 MB
def twosum(nums, target):
    listlen = len(nums)
    dicttmp = {}
    for i in range(0, listlen):
        if target - nums[i] in dicttmp:
            return [dicttmp[target - nums[i]], i]
        dicttmp[nums[i]] = i
    return []

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954077.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号