问题描述:
设置一个数据结构实现以下数组功能,其时间复杂度为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