调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。 如数组:[1,2,3,4,5,6] 调整后可能是:[1, 5, 3, 4, 2, 6]
时间: 2023-06-02 19:08:05 浏览: 69
可以使用两个指针,一个指向数组开头,一个指向数组末尾,分别向中间遍历,遇到奇数就继续向前遍历,遇到偶数就继续向后遍历,当两个指针相遇时,整个数组就已经调整好顺序了。以下是示例代码:
```
void reorder(int[] arr) {
int left = 0, right = arr.length - 1;
while (left < right) {
while (left < right && arr[left] % 2 == 1) left++;
while (left < right && arr[right] % 2 == 0) right--;
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
```
相关问题
调整数组顺序使奇数位于偶数前面(栈和队列)
这道题可以使用双指针法,定义左指针left指向数组开头,右指针right指向数组末尾。然后不断向中间靠拢,如果左指针指向的数是偶数,右指针指向的数是奇数,就交换两个数的位置。直到左指针和右指针相遇为止。
具体实现可以参考以下代码:
```python
def reorder_odd_even(nums):
if not nums:
return nums
left, right = 0, len(nums) - 1
while left < right:
if nums[left] % 2 == 0 and nums[right] % 2 == 1:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
elif nums[left] % 2 == 1:
left += 1
elif nums[right] % 2 == 0:
right -= 1
return nums
```
这个算法的时间复杂度为O(n),空间复杂度为O(1)。
一个数组里有奇数有偶数(乱序),调整数组顺序使奇数位于偶数前面。(测试用例仅做参考,我们会根据代码质量进行评分)
你可以使用双指针法来解决这个问题。定义两个指针,一个指向数组头部,一个指向数组尾部。然后分别向中间遍历,当左指针指向偶数,右指针指向奇数时,交换两个数字的位置。直到左右指针相遇为止。
下面是一个示例的实现代码:
```python
def rearrange_array(nums):
left = 0
right = len(nums) - 1
while left < right:
# 左指针指向奇数,继续向右移动
if nums[left] % 2 == 1:
left += 1
# 右指针指向偶数,继续向左移动
elif nums[right] % 2 == 0:
right -= 1
# 左指针指向偶数,右指针指向奇数,交换两个数字的位置
else:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
return nums
# 测试用例
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = rearrange_array(nums)
print(result)
```
这段代码会输出 `[1, 9, 3, 7, 5, 6, 4, 8, 2]`,其中奇数位于偶数前面。注意,这里假设奇数和偶数的相对顺序不重要,只要奇数在偶数前面即可。