算法72-实现一个add和del复杂度为O(1)的结构

题目:
实现一个数据结构,要求:
1 add和删除的复杂度为O(1)
2 get时返回随机的元素
3 可以add重复的数据,但内存中只有一份

分析:
两张hash表
1 记录插入的index-value
2 记录插入的value-index

add方法,插入后分别记录两张表,更新size
get方法,生成随机的index,返回index的value
remove方法,根据传入的值从表2找到index,再从表一找到后删除,两张表都删除,删除后将记录的size位置的元素移动到删除的空位,这样get的时候就会是实现随机

实现:


#!/usr/bin/python
# -*- coding:utf-8 -*-
#wnagzhoufeng
#实现一个数据结构,插入,删除的时间复杂度为O(1),get时随机返回一个值,可以add重复值,但内存中只能有一份
#借助hash表,两个hase表,一个记录v-index。另一个记录index-v
import random


class struct:
    m1=dict
    m2=dict
    size=0
    def __init__(self,m1,m2,size):
        self.m1=m1
        self.m2=m2
        self.size=size
    def Add(self,n):
        if self.size==0:
            self.m2[n]=1
            self.m1[1]=n

            self.size+=1
        else:
            if self.m2.has_key(n) == 0:
                self.m2[n]=self.size+1
                self.m1[m2[n]]=n
                self.size+=1


    def Remove(self,n):
        tmp= self.m2.get(n)
        if tmp !=0:
            del self.m2[n]
            del self.m1[tmp]
            self.m1[tmp]=self.m1[self.size]
            self.m2[self.m1[self.size]]=tmp
            del self.m1[self.size]
            self.size-=1

    def get(self):
        n=random.randint(1,self.size)
        return self.m1[n]

if __name__=='__main__':
    m1={}
    m2={}
    t=struct(m1,m2,0)
    t.Add(7)
    t.Add(8)
    t.Add(9)
    t.Add(10)
    t.Add(10)

    print t.m1
    print t.m2


    # # print t.getsize()
    t.Remove(7)
    print t.m1
    print t.m2
    print t.get()
    # # print t.m2
    # # print t.m1
    # print t.Get()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值