Untitled

 avatar
unknown
python
2 years ago
1.3 kB
7
Indexable


"""
O(a*m)
a是indexOf的答案
m是有幾個map

就是给你一个array 比如你想每个数字都加1 就map (i -> i+1)然后你就想要比如第五个数字是啥 这道题应该就是不想让你把每个数字都update

Lazy Array 需要注意的是在map后多次indexOf。
并且map之后不能修改原数组,所以地里给的用一个list存functions其实会有问题。
一个例子是LazyArray b = a.map(...), 此时b应该是不保存a中的functions的。

lazy array这题是indexOf的时候对每一个值执行这个list of functions然后如果等于targetValue就返回index吗??

"""


class LazyArray:
	def __init__(self, arr):
		self.arr = arr
		self.mapping_func = lambda x : x

	def map(self, func):
		lazy_array = LazyArray(self.arr) # create a new LazyArray??!!!
		lazy_array.mapping_func = lambda x : func(self.mapping_func(x))

		return lazy_array


	def indexOf(self, value):
		for index, val in enumerate(self.arr):
			if self.mapping_func(val) == value:
				return index

		return -1



arr = [10, 20, 30, 40, 50]
lazy = LazyArray(arr)

index = lazy.map(lambda x: x * 2).map(lambda x: x * 3).indexOf(240);
print("index = ", index)

index = lazy.map(lambda x: x * 2).indexOf(40);
print("index = ", index)


index = lazy.map(lambda x: x * 3).indexOf(30);
print("index = ", index)






Editor is loading...