2018好未来图像算法工程师面试算法题1

本文介绍了一种特殊数据结构的设计,通过使用全局变量和局部数组,实现了在O(1)时间复杂度下进行单个赋值、全体赋值及按序号查询的操作,有效解决了传统数组操作效率低下的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

设置一个数据结构实现以下数组功能,其时间复杂度为O(1):

1.set(index,x):单个赋值

2.setAll(x):全体赋值

3.select(index):按序号查找

问题分析:

这个问题应该属于特殊问题:想了很久,当看到全体赋值时,时间复杂度至少为O(n)。所以使用一个全局变量代替全体赋值。

同时还要判断查找时输出全局值还是局部个体值,所以加一个序号,判断最后一次赋值是哪一个。

class Arrays:
    def __init__(self, num=100, index_max=100):
        self.index = 0 #赋值次数
        self.data_all = 0 #全局数值
        self.index_all = 0 #全局序号
        self.index_data = [0 for i in range(num)] #数组每个值序号
        self.datas = [0 for i in range(num)] #全部数组
        self.index_max = index_max

    def reset(self):
        #重置
        self.index_all = 0
        self.index_data = [0 for i in range(num)]

    def set(self, index, x):
        #单个赋值
        self.datas[index] = x
        if self.index == self.index_max:
            self.reset()
        self.index += 1
        self.index_data[index] = self.index
        
    def set_all(self, x):
        #全体数据赋值
        self.data_all = x
        if self.index == self.index_max:
            self.reset()
        self.index += 1
        self.index_all = self.index
    
    def select(self, index):
        #按序号查询
        if self.index_data[index] > self.index_all:
            return self.datas[index]
        else:
            return self.data_all

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值