📅  最后修改于: 2023-12-03 15:09:36.389000             🧑  作者: Mango
在数组中,有时需要将所有负面元素按顺序移动到末尾。如果没有附加限制,则可以使用双指针技术和数组重组技术轻松地实现该任务。但是,在这里,我们需要在末尾允许额外的空间。
在这种情况下,我们可以考虑创建一个新数组来保存负面元素,并将正面元素移动到前面的位置。我们将在新的数组末尾添加负面元素,并始终保持数组是按顺序排序的。
下面是一个示例Java代码,它使用双指针技术和新数组重组技术,将所有负面元素按顺序移动到了末尾并允许额外的空间。
public class MoveNegativeElementsToEnd {
public static int[] move(int[] arr) {
int[] negativeArr = new int[arr.length];
int negativeIndex = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 0) {
arr[negativeIndex++] = arr[i];
} else {
negativeArr[Math.abs(arr[i])] = arr[i];
}
}
for (int i = 0; i < negativeArr.length; i++) {
if (negativeArr[i] != 0) {
arr[negativeIndex++] = negativeArr[i];
}
}
return arr;
}
public static void main(String[] args) {
int[] arr = new int[]{2, 4, -6, 8, 0, -1, -6, 7, -9, 10};
System.out.println(Arrays.toString(move(arr)));
}
}
该代码包括:
使用上述代码,输出将是:
[2, 4, 8, 0, 7, 10, -6, -1, -6, -9]
在本文中,我们介绍了一种将所有负面元素按顺序移动到末尾的方法,并允许额外的空间。我们使用了Java语言举例,展示了如何使用双指针技术和数组重组技术来实现这项任务。
以上是一个简单的示例代码,可以根据需求进行更改或修改。