Для отделения нулей от ненулевых элементов в массиве целых чисел в Java можно использовать подход с двумя указателями (two-pointer approach). Рассмотрим пример:
int[] arr = {0, 1, 0, 3, 12};
int i = 0; // указатель на первый элемент массива int j = 0; // указатель на первый нулевой элемент массива
while (i < arr.length) {
if (arr[i] != 0) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
j++;
}
i++;
}
System.out.println(Arrays.toString(arr)); // [1, 3, 12, 0, 0]
В данном примере мы используем два указателя i и j, чтобы разделить массив на две части: ненулевые элементы перед нулевыми. Изначально оба указателя указывают на первый элемент массива. Затем мы перебираем каждый элемент массива при помощи указателя i. Если текущий элемент не равен 0, то мы меняем местами элемент с индексом i и нулевой элемент с индексом j, затем увеличиваем значение j. В результате получается массив, в котором все ненулевые элементы находятся перед нулевыми.
Этот подход имеет временную сложность O(n) и является эффективным для больших массивов.
Также можно использовать метод Arrays.sort(), чтобы отсортировать массив таким образом, чтобы нули оказались в конце, а ненулевые элементы - в начале:
int[] arr = {0, 1, 0, 3, 12};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [0, 0, 1, 3, 12]
Однако этот способ менее эффективен при больших объемах данных, так как его временная сложность составляет O(n log n).
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov