For a list li
, I want to print only the values of the triplets a, b, c
where 0 <= index(a) < index(b) < index(c) < len(li)
.
Example:
f([6, 3, 88, 4])
6 3 88
6 3 4
6 88 4
3 88 4
Here is my solution, but it is O(n**3) (time complexity):
def f(li):
for i, n in enumerate(li):
for j, o in enumerate(li):
for k, p in enumerate(li):
if i < j < k:
print n, o, p
However, it should be doable in O(n). Any clues?
I have the following function as well:
def f(li):
i = 0
j = i + 1
k = j + 1
n = li[i]
o = li[j]
p = li[k]
while i < j < k:
print n, o, p
if n == li[-3]:
break
if p != li[-1]:
k += 1
elif o == li[-2]:
i += 1
j = i + 1
k = j + 1
elif p == li[-1]:
j += 1
k = j + 1
n = li[i]
o = li[j]
p = li[k]
I believe this is O(n).