Учитывая массив положительных и отрицательных чисел (без нулей), я должен упорядочить их таким образом, чтобы положительное и отрицательное числа были упорядочены последовательно. Число положительных и отрицательных чисел числа не могут быть равны, т. е. если в положительном числе (или отрицательном) не осталось положительного числа, тогда все остальные отрицательные числа (или положительные) добавляются к концу массива. Порядок важен, т. е. входной массив равен {2, - 1, -3, -7, -8,9,5, -5, -7}, тогда выходной массив должен быть {2, -1,9, -3,5, -7, -8, -5, -7}. Код выполняется в O (n) без использования другого массива.Альтернативное положительное отрицательное число в массиве
Это мое решение в java, я снова тестирую его на несколько случаев, и он работает. Однако я не уверен, что это выполняется в O (n) времени. В принципе, я сначала подсчитываю число положительных и отрицательных чисел. то у меня есть два индекса i = 0 и j = 1. j всегда на 1 шаг вперед i. Оттуда я продолжаю проверять, является ли число в i положительным, а j отрицательным, если это не так, я буду перебирать массив, пока не найду следующий положительный/отрицательный для правильной позиции и переместил бы его в правильное положение.
Любое предложение очень ценится. Благодаря!
//array of negative and positive, arrange them so that positive number follow by negative
// if no pos or neg left, the rest append to the array.
//should be O(n) no additional array
public static void alter(int[] a) {
int pos = 0;
int neg = 0;
int index = 0;
while(c <a.length){
if(a[index] > 0){
pos++;
}
else neg++;
index++;
}
int i = 0;
int j = 1;
int temp = 0;
//run until no more positive number or negative number
while(pos >0 && neg > 0){
//
if(a[i] > 0){
pos--;
if(a[j] < 0){
i += 2;
j += 2;
neg--;
}else // a[j] > 0
{
while(a[j] > 0){
j++;
}
//a[j] < 0
neg--;
//move that number to the appropriate place
while(j > i){
temp = a[j];
a[j] = a[j -1];
a[j-1] = temp;
j--;
}// end while
i += 2;
j +=2 ;
}
}else // a[i] < 0
{
while(a[i] < 0){
i++;
}
//a[i] > 0
//move that number to the appropriate place
while(i > (j -1)){
temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
i--;
}
} //end else
}
}
Вы должны иметь только один массив? Для этого будет лучше, чем минимум два – Rika
Да, разрешен только один массив – user2543457