mirror of
https://github.com/iritmaximus/tira.git
synced 2026-10-12 19:13:47 +03:00
56 lines
1.6 KiB
Python
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
|