I have this input
arr = [1,2,1,3,4,2,4,2]
What I'm trying to achieve is make elements of the given list as keys of a map and its indices as values in the form of a list.
Like this :
mp = {1:[0,2],2:[1,5,7],3:[3],4:[4,6]}
And what will be the time-complexity for this?
CodePudding user response:
from collections import defaultdict
result = defaultdict(list)
for pos, num in enumerate(array):
result[num].append(pos)
Time complexity is O(n), there is only one loop and all things in the loop (looking up thing in dictionary, appending an item) are constant wrt. the number of items.
CodePudding user response:
arr = [1, 2, 1, 3, 4, 2, 4, 2]
mp = {
num: [i for i, k in enumerate(arr) if i == num]
for num in set(arr)
}
or normally:
arr = [1, 2, 1, 3, 4, 2, 4, 2]
mp = {}
for num in set(arr):
mp[num] = []
for i, k in enumerate(arr):
if k == num:
mp[num] = [i]
Sorry, i do not know much about the time complexities stuff, but naturally two loops, so O(n^2).
CodePudding user response:
try
arr = [1,2,1,3,4,2,4,2]
d = {}
for n in set(arr):
d[n] = [i for i, x in enumerate(arr) if x==n]
or
import numpy as np
arr = [1,2,1,3,4,2,4,2]
arr = np.array(arr)
d = {n:np.where(arr==n)[0].tolist() for n in set(arr)}
