【发布时间】:2017-02-19 16:57:25
【问题描述】:
我正在尝试编写一个方法,该方法采用 ints 数组,然后重新排列数组中的数字,使负数排在第一位。数组不需要以任何方式排序。唯一的要求是解必须是线性的,并且不使用额外的数组。
输入:
{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--;
}
}
【问题讨论】:
-
如果你要自己解决这个问题,不写程序,你会怎么做?您能否采用该解决方案并将其分解为可以构成您的程序基础的一系列步骤?
-
您实际上已经很接近了。您的代码结构是正确的,但您的比较并不完全正确,您的循环边界有错误,并且您的输出语句位于错误的位置。
-
@scottb 我已经这样做了好几次,但我总是意识到我刚刚提出的解决方案是非线性的。我总是不止一次循环播放它,这让我发疯!
-
当你不知道你刚刚输入
i的数字是正数还是负数时,你怎么能执行i++? -
@Schytheron 使用递归怎么样?