2020.5.17-力扣刷刷2-1.两数之和
发布日期:2021-05-07 08:51:56 浏览次数:19 分类:精选文章

本文共 1312 字,大约阅读时间需要 4 分钟。

在这里插入图片描述

题解一:暴力法:

遍历数组A[i],如果(目标值-A[i])在数组中且两者的所在位置即索引不相等,则返回它们的位置。

def twosum(A,x):    for i in range(len(A)):        right=A[i]        n=x-right        if n in A and A.index(n)!=right:#A.index(n)数组中nd的索引            return [i,A.index(n) ]         else:            return []

在这里插入图片描述

时间复杂度:O( n 2 n^2 n2)
空间复杂度:O(1)

题解二:哈希映射hashmap

  • 利用哈希表的查找元素时间复杂度为O(1)的优点,可对此题建立哈希映射

  • 用hashMap将数组的下标和值反向一一对应。遍历数组,对于数组中的每一个值,用hashmap找出唯一对应的值即数组中元素索引。

    例如示例中target = 9,num[0] = 2,那么就在hashmap中查找key = 9-2 = 7的value, 即1。

def twoSum(nums, target):        """        :type nums: List[int]        :type target: int        :rtype: List[int]        """        hash_map ={    }#以字典的形式建立空哈希表,哈希表的键key是数组元素,值value是索引        for i,x in enumerate(nums):            if target - x in hash_map:                return [i,hash_map[target-x]]            hash_map[x] = i#这句不能放在if语句之前,解决list中有重复值或target-x=x的情况

enumerate()函数的描述:

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

使用语法:

enumerate(sequence,[start=0])

参数:

  • sequence 一个序列、迭代器或其他支持迭代的对象 (string、list 和 tuple 都属于 sequence(序列))
  • start 下标数据下标起始位置。默认为0
    例子:
    start默认
A=[12,14,16,18]em=enumerate(A)a=[i for i in em]print(a)

输出结果:

[(0, 12), (1, 14), (2, 16), (3, 18)]

start=100

A=[12,14,16,18]em=enumerate(A,start=100)b=[i for i in em]print(b)

输出结果:

[(100, 12), (101, 14), (102, 16), (103, 18)]

上一篇:数据结构-重中之重-搞懂哈希表(python)
下一篇:python中的map( )函数及lambda()函数简介

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月14日 10时57分52秒