java中给定一个整数数组,将其中的奇数元素放在数组的前半部分,偶数元素放在数组的后半部分,同时保持奇数和偶数元素的相对顺序不变。 示例:输入:[1, 2, 3, 4, 5, 6] 输出:[1, 3, 5, 2, 4, 6]
时间: 2024-10-19 22:12:25 浏览: 26
在Java中,你可以通过双指针法实现这个需求。这里是一个简单的步骤:
1. 初始化两个指针,一个 `left` 指向数组的开始(0),另一个 `right` 指向数组的结束(arr.length - 1)。
2. 循环执行直到 `left` 小于 `right`:
a. 如果 `arr[left]` 是偶数,那么它应该保留在偶数部分,所以不需要移动 `left`。
b. 如果 `arr[right]` 是奇数,那么它应该保留在奇数部分,直接将它移到 `arr[left + 1]` 的位置,然后 `left` 向右移动一位。
c. 如果 `arr[left]` 和 `arr[right]` 都是奇数或偶数,交换它们的位置,因为我们需要保证奇数先于偶数,然后同时将 `left` 和 `right` 向中间移动一位。
3. 当循环结束时,数组就被按照奇数在前、偶数在后的规则重新排列了。
以下是相应的Java代码实现:
```java
public int[] rearrangeArray(int[] arr) {
if (arr == null || arr.length <= 1) {
return arr;
}
int left = 0;
int right = arr.length - 1;
while (left < right) {
if (arr[left] % 2 == 0) { // 偶数
left++;
} else if (arr[right] % 2 != 0) { // 奇数
swap(arr, left, right);
left++;
} else {
right--;
}
}
return arr;
}
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
```
阅读全文