Skip to content

Commit 8c006f8

Browse files
committed
Updated longest alternating subsequence to return actual subsequence
1 parent 98e1538 commit 8c006f8

File tree

2 files changed

+46
-24
lines changed

2 files changed

+46
-24
lines changed

pydatastructs/linear_data_structures/algorithms.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1881,11 +1881,11 @@ def longest_alternating_subsequence(array: OneDimensionalArray, **kwargs) -> int
18811881
>>> arr = OneDimensionalArray(int, [1, 5, 4])
18821882
>>> las = longest_alternating_subsequence(arr)
18831883
>>> las
1884-
3
1884+
[1, 5, 4]
18851885
>>> arr = OneDimensionalArray(int, [1, 5, 4, 3, 2, 6, 7])
18861886
>>> las = longest_alternating_subsequence(arr)
18871887
>>> las
1888-
4
1888+
[1, 5, 2, 7]
18891889
18901890
References
18911891
==========
@@ -1900,20 +1900,27 @@ def longest_alternating_subsequence(array: OneDimensionalArray, **kwargs) -> int
19001900
raise_if_backend_is_not_python(
19011901
longest_alternating_subsequence, kwargs.get('backend', Backend.PYTHON))
19021902

1903-
increasing = 1
1904-
decreasing = 1
1903+
# Edge case
1904+
if len(array) == 0:
1905+
return OneDimensionalArray(int, [])
1906+
1907+
increasing = [array[0]]
1908+
decreasing = [array[0]]
19051909
n = len(array)
19061910

19071911
# Iterate from second element
19081912
for i in range(1, n):
19091913

19101914
# Increasing changes if decreasing changes
19111915
if (array[i] > array[i-1]):
1912-
increasing = decreasing + 1
1916+
increasing = decreasing + [array[i]]
19131917

19141918
# Decreasing changes if increasing changes
19151919
elif (array[i] < array[i-1]):
1916-
decreasing = increasing + 1
1920+
decreasing = increasing + [array[i]]
19171921

19181922
# Return the maximum length
1919-
return max(increasing, decreasing)
1923+
if len(increasing) > len(decreasing):
1924+
return OneDimensionalArray(int, increasing)
1925+
else:
1926+
return OneDimensionalArray(int, decreasing)

pydatastructs/linear_data_structures/tests/test_algorithms.py

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -420,26 +420,41 @@ def test_longest_alternating_subsequence():
420420
ODA = OneDimensionalArray
421421

422422
arr1 = ODA(int, [-4, 3, -5, 9, 10, 12, 2, -1])
423-
output: int = longest_alternating_subsequence(arr1)
424-
expected_result = [3, -5, 9, 2, -1]
425-
assert len(expected_result) == output
423+
output: OneDimensionalArray = longest_alternating_subsequence(arr1)
424+
expected_result = [-4, 3, -5, 12, -1]
425+
assert str(expected_result) == str(output)
426426

427427
arr2 = ODA(int, [10, 22, 9, 33, 49, 50, 31, 60])
428-
output: int = longest_alternating_subsequence(arr2)
429-
expected_result = [10, 22, 9, 33, 31, 60]
430-
assert len(expected_result) == output
428+
output: OneDimensionalArray = longest_alternating_subsequence(arr2)
429+
expected_result = [10, 22, 9, 50, 31, 60]
430+
assert str(expected_result) == str(output)
431431

432432
arr3 = ODA(int, [1, 2, 3, 4, 5, 6, 7, 8, 9])
433-
output: int = longest_alternating_subsequence(arr3)
434-
expected_result = [1, 2]
435-
assert len(expected_result) == output
433+
output: OneDimensionalArray = longest_alternating_subsequence(arr3)
434+
expected_result = [1, 9]
435+
assert str(expected_result) == str(output)
436436

437437
arr4 = ODA(int, [9, 8, 7, 6, 5, 4, 3, 2, 1])
438-
output: int = longest_alternating_subsequence(arr4)
439-
expected_result = [9, 8]
440-
assert len(expected_result) == output
441-
442-
arr5 = ODA(int, [1, 5, 4, 3, 2, 1, 6, 7, 8, 9])
443-
output: int = longest_alternating_subsequence(arr5)
444-
expected_result = [1, 5, 4, 6]
445-
assert len(expected_result) == output
438+
output: OneDimensionalArray = longest_alternating_subsequence(arr4)
439+
expected_result = [9, 1]
440+
assert str(expected_result) == str(output)
441+
442+
arr5 = ODA(int, [1, 5, 4, 3, 2, 6, 7])
443+
output: OneDimensionalArray = longest_alternating_subsequence(arr5)
444+
expected_result = [1, 5, 2, 7]
445+
assert str(expected_result) == str(output)
446+
447+
arr6 = ODA(int, [1, 5, 4])
448+
output: OneDimensionalArray = longest_alternating_subsequence(arr6)
449+
expected_result = [1, 5, 4]
450+
assert str(expected_result) == str(output)
451+
452+
arr7 = ODA(int, [])
453+
output: OneDimensionalArray = longest_alternating_subsequence(arr7)
454+
expected_result = []
455+
assert str(expected_result) == str(output)
456+
457+
arr8 = ODA(int, [1])
458+
output: OneDimensionalArray = longest_alternating_subsequence(arr8)
459+
expected_result = [1]
460+
assert str(expected_result) == str(output)

0 commit comments

Comments
 (0)