From 36135563db16081ad64060676b36b6cf4f09b207 Mon Sep 17 00:00:00 2001 From: 30215210 Date: Sun, 9 Feb 2025 02:37:15 -0700 Subject: [PATCH 1/2] Handle Edge Case in _last_pos_filled Calculation --- pydatastructs/linear_data_structures/arrays.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pydatastructs/linear_data_structures/arrays.py b/pydatastructs/linear_data_structures/arrays.py index 2e0c3fd9..ef190567 100644 --- a/pydatastructs/linear_data_structures/arrays.py +++ b/pydatastructs/linear_data_structures/arrays.py @@ -380,10 +380,10 @@ def _modify(self, force=False): below load factor. """ if force: - i = -1 - while self._data[i] is None: + i = self._size - 1 + while i >= 0 and self._data[i] is None: i -= 1 - self._last_pos_filled = i%self._size + self._last_pos_filled = i if (self._num/self._size < self._load_factor): arr_new = OneDimensionalArray(self._dtype, 2*self._num + 1) j = 0 From 92f2c9286a0a802783ce977a6b2cdd3d1b647785 Mon Sep 17 00:00:00 2001 From: 30215210 Date: Sun, 9 Feb 2025 11:55:21 -0700 Subject: [PATCH 2/2] Improve the logic of _last_pos_filled considering edge case --- pydatastructs/linear_data_structures/arrays.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pydatastructs/linear_data_structures/arrays.py b/pydatastructs/linear_data_structures/arrays.py index ef190567..948e0e42 100644 --- a/pydatastructs/linear_data_structures/arrays.py +++ b/pydatastructs/linear_data_structures/arrays.py @@ -380,10 +380,12 @@ def _modify(self, force=False): below load factor. """ if force: - i = self._size - 1 - while i >= 0 and self._data[i] is None: - i -= 1 - self._last_pos_filled = i + left = 0 + for i in range(self._size): + if self._data[i] is not None: + self._data[left], self._data[i] = self._data[i], self._data[left] + left += 1 + self._last_pos_filled = left - 1 if (self._num/self._size < self._load_factor): arr_new = OneDimensionalArray(self._dtype, 2*self._num + 1) j = 0