Вы не можете сделать это лучше, чем O (n) раз, но вы можете сделать свой код более кратким.
Глядя на свое решение, поскольку порядок элементов не имеет значения, вы можете просто сохранить переменная-указатель, которая идет от последнего к первому и содержит элементы обмена с этим указателем.
Фрагмент:
private static void solve(int[] arr){
for(int i=arr.length-1,ptr = i;i>=0;--i){
if((arr[i] & 1) == 1){
swap(arr,i,ptr--);
}
}
}
private static void swap(int[] arr,int x,int y){
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
Демонстрация: https://onlinegdb.com/HyKNVMbwL
Если порядок элементов имеет значение
- Вы можете собрать все нечетные в новом списке.
- Переместить все четные влево.
- Назначить все нечетные один за другим из списка в массив, где заканчивались четные единицы.
- Это увеличит сложность пространства до O (n).