Удаление отрицательных элементов из массива
Удалить из массива все отрицательные элементы(под удаление следует понимать: исключение этого элемента из массива путем смещения всех следующих за ним элементов влево на 1 позицию; присваивание последнему элементу 0. Если нужно удалить 3 элемента, то сдвиг идет влево на 3 позиции, и 3 значения равны 0). Решение:
int nums[] = { -14, 10, -29, 15, -46, 74, -99, 22 };
// показываю исходный массив
for (int t = 0; t < nums.length; t++)
System.out.print(nums[t] + " ");
System.out.println();
for (int t = 0; t < nums.length; t++) {
if (nums[t] < 0) {
for (int d = t; d < nums.length - 1; d++)
nums[d] = nums[d + 1];
nums[nums.length - 1] = 0;
}
}
Это решение справедливо, когда элементы чередуются следующем образом (-14, 10, -29, 15, -46, 74, -99, 22) (то есть сначала "-" потом "+"). Как можно решить задачу в общем случае(то есть в любом порядке) ?
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
"Сжатие" массива за линейное время:
int k = 0;
for (int t = 0; t < nums.length; t++) {
if (nums[t] < 0)
k++;
else
nums[t - k] = nums[t];
}
и в конце k нулей заполните
for (int t = nums.length - k; t < nums.length; t++)
nums[t] = 0;
Автор решения: Алексей Шиманский
→ Ссылка
int nums[] = { -14, 10, -29, 15, -46, 74, -99, 22 };
int result[] = new int[nums.length];
Arrays.sort(nums); // сортируем исходный массив
// Пробегаемся а обратном порядке
for (int i = nums.length - 1, j = 0; i > 0; --i, ++j) {
// Если число положительное - добавляем его в результирующий,
// иначе добавляем 0
result[j] = nums[i] > 0 ? nums[i] : 0;
}