Skip to content

Commit 0bf1b26

Browse files
committed
fix: add input validation to cyclic_sort to prevent infinite loop
1 parent c0db072 commit 0bf1b26

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

sorts/cyclic_sort.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,23 @@ def cyclic_sort(nums: list[int]) -> list[int]:
2727
[]
2828
>>> cyclic_sort([3, 5, 2, 1, 4])
2929
[1, 2, 3, 4, 5]
30+
>>> cyclic_sort([1, 2, 2])
31+
Traceback (most recent call last):
32+
...
33+
ValueError: All numbers must be unique, got [1, 2, 2]
34+
>>> cyclic_sort([1, 2, 5])
35+
Traceback (most recent call last):
36+
...
37+
ValueError: All numbers must be in range 1 to 3, got 5
3038
"""
39+
if len(set(nums)) != len(nums):
40+
msg = f"All numbers must be unique, got {nums}"
41+
raise ValueError(msg)
42+
n = len(nums)
43+
for num in nums:
44+
if num < 1 or num > n:
45+
msg = f"All numbers must be in range 1 to {n}, got {num}"
46+
raise ValueError(msg)
3147

3248
# Perform cyclic sort
3349
index = 0

0 commit comments

Comments
 (0)