Я пытаюсь написать mehtod, который принимает массив из int и затем переупорядочивает числа в массиве, чтобы первые отрицательные числа были первыми. Массив не нужно сортировать в любом случае. Единственное требование состоит в том, что решение должно быть линейным и не использовать дополнительный массив.Java - перестроить массив int так, чтобы все отрицательные числа приходили перед позитивистскими числами
Пример: Входной сигнал: {1, -5, 6, -4, 8, 9, 4, -2} Выход: {-5, -2, -4, 8, 9, 1, 4, 6}
Теперь, как нуб в Java и программирование в целом, я не уверен на 100% на том, что считается линейным решением, но я предполагаю, что это должно быть решение, которое не использует цикл внутри петля.
У меня в настоящее время есть ужасное решение, которое, как я знаю, не работает (и я также понимаю, почему), но я не могу думать о каком-либо другом решении. Эта задача была бы легкой, если бы мне разрешили использовать цикл в цикле или дополнительном массиве, но мне не разрешено.
Мой код:.
public static void separateArray(int[] numbers) {
int i = 0;
int j = numbers.length-1;
while(i<j){
if(numbers[i] > 0){
int temp;
temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
System.out.println(Arrays.toString(numbers));
}
i++;
j--;
}
}
Любая помощь очень ценится (была бы очень признательна, если вы могли бы также определить, что именно «линейный раствор» Я искал по всему интернету и нашел очень неопределенные explainations но не четкое определение). Благодаря!
EDIT: Решенный!
Final Код:
public static void separateArray(int[] numbers) {
int i = 0;
int j = numbers.length-1;
while(i<j){
if(numbers[i] >= 0 && numbers[j] < 0){
int temp;
temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
if(numbers[i] < 0){
i++;
}
if(numbers[j] >= 0){
j--;
}
}
}
Если вы собираетесь решить эту проблему самостоятельно, не написав программу, как бы вы это сделали? Можете ли вы принять это решение и разбить его на несколько этапов, которые могли бы стать основой вашей программы? – scottb
Вы на самом деле довольно близко. Структура вашего кода верна, но ваше сравнение не совсем правильно, у вас есть ошибка в ваших ограничениях на петли, и ваш выходной оператор находится в неправильном месте. –
@scottb Я сделал это несколько раз, но я всегда понимаю, что решение, которое я только что придумал, является нелинейным. Я всегда кончаю его более одного раза, и это сводит меня с ума! – Schytheron