python中的listnode_Python列表集查询效率的比较,pythonlistset,对比

在LeetCode 141. Linked List Cycle中,分别使用list和set存储node,遍历时间差别巨大。

因此,做测试对比list和set的查询效率。

import time

import numpy as np

nums = np.random.randint( 0, 1e7, int(1e3))

set1 = set(np.random.randint(0, 1e7, int(1e5)))

list1 = list(set1)

t1 = time.time()

for i in nums:

i in set1

t2 = time.time()

for i in nums:

i in list1

t3 = time.time()

print(t2-t1)

print(t3-t2)

b91f36e41397c617f486671ba1f793a4.png

单次查询中:看来list 就是O(n)的;而set做了去重,本质应该一颗红黑树(猜测,STL就是红黑树),复杂度O(logn);dict类似对key进行了hash,然后再对hash生成一个红黑树进行查找,其查找复杂其实是O(logn),并不是所谓的O(1)。O(1)只是理想的实现,实际上很多hash的实现是进行了离散化的。dict比set多了一步hash的过程,so 它比set慢,不过差别不大。

————————————————

版权声明:本文为CSDN博主「Icoding_F2014」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/jmh1996/article/details/78481365

PS

1. 用list存储node

# Definition for singly-linked list.

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

class Solution:

def hasCycle(self, head: ListNode) -> bool:

nodes = []

while head != None:

if head in nodes:

return True

else:

nodes.append(head)

head = head.next

return False

1337d51ee37d27464ccc3a2232105c57.png

2. 用set存储node

# Definition for singly-linked list.

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

class Solution:

def hasCycle(self, head: ListNode) -> bool:

# set要比list的遍历速度快

nodes = set()

while head != None:

if head in nodes:

return True

else:

nodes.add(head)

head = head.next

return False

cd54236bcb06db21e3d902063835395d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值