Мы используем следующий алгоритм, чтобы вывести все четные слева и все нечетные справа от массива:
def evenOddPartition(self,nums):
# partition an array such that all even are on the left
# and all odd are on the right
i = 0
j = len(nums) - 1
while i < j:
## if i is even skip this index
if nums[i]%2 == 0:
i+=1
elif nums[j] %2 == 0:
## if nums[i] is odd and nums[j] is even
nums[i],nums[j] = nums[j],nums[i]
j-= 1
else:
## both are odd
## decrement j (i.e try to see if there is any other even before it)
j-=1
return nums
Even / Odd - это двоичная классификация типа true false.
Теперь у меня вопрос, почему мы не можем применить эту же двоичную классификацию к таким проблемам:
Рассмотрим этот массив: y = [2,3,5, -100,100,5, 5,6,3,5]
И вас просят переместить все элементы <= 5 в левую сторону и все> 5 в правую сторону:
Используя те же логики c в качестве четной / нечетной задачи я представляю этот код
def tryTwo(self,nums):
pivot = 5
i = 0
j = len(nums) - 1
while i < j:
if nums[i] < pivot:
i+=1
elif nums[i] == pivot:
i+=1
elif nums[i] > pivot:
if nums[j] <= pivot:
nums[i], nums[j] = nums[j], nums[i]
j-=1
else:
j-=1
else:
j-=1
return nums
Однако этот код выводит [2, 3, 5, -100, 5, 5, 5, 3, 6, 100], что неправильный ответ Правильный ответ примерно такой:
[2, 3, -100, 3, 5, 5, 5, 5, 100, 6]
Чего мне здесь не хватает? Есть ли ошибка в моем втором коде?