Files
tira/viikko2/alternation.py
T
2023-11-07 01:27:43 +02:00

56 lines
1.6 KiB
Python

def count(t):
"""
Saat syötteenä listan, jossa on jokin lukujen 1…n
permutaatio. Tehtäväsi on laskea listan vuorottelevien
osajonojen lukumäärä.
Tässä vuorotteleva tarkoittaa sitä, että osajonossa
seuraava luku on aina vuorotellen pienempi tai suurempi
kuin edellinen. Toisin ilmaistuna vuorotteleva osajono
on sellainen, joka ei sisällä ainuttakaan vähintään
kolmen pituista kasvavaa eikä vähenevää osajonoa.
Tavoitteena on, että algoritmin aikavaativuus on O(n).
Toteuta tiedostoon alternation.py funktio count, joka
palauttaa vuorottelevien osajonojen lukumäärän.
"""
result = 0
result += len(t) * 2 - 1
dict = {}
last_group = []
next_itr = ""
print()
print(t)
for i, x in enumerate(t):
print(f"len of dict = {len(dict)} - iteration: {i}")
if len(dict) == 0:
dict[x] = ""
elif len(dict) == 1:
# print(f"{list(dict.keys())[0]} < {x} = lower {list(dict.keys())[0] < x}")
# print(f"{list(dict.keys())[0]} > {x} = higher {list(dict.keys())[0] > x}")
if list(dict.keys())[0] < x:
dict[t[i - 1]] = "lower"
dict[x] = "higher"
elif list(dict.keys())[0] > x:
dict[t[i - 1]] = "higher"
dict[x] = "lower"
else:
print("???")
elif len(dict) >= 2:
print("***")
print(dict)
return result
if __name__ == "__main__":
print(count([1, 2, 3, 4])) # 7 -7 = 0
print(count([1, 4, 2, 5, 3])) # 15 -9 = 6
print(count([7, 2, 1, 3, 5, 4, 6])) # 17 -13 = 4