调整数组顺序使奇数位于偶数前面(栈和队列)
时间: 2023-08-21 15:27:53 浏览: 66
这道题可以使用双指针法,定义左指针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]`,其中奇数位于偶数前面。注意,这里假设奇数和偶数的相对顺序不重要,只要奇数在偶数前面即可。
一个数组里有奇数有偶数(乱序),调整数组顺序使奇数位于偶数前面。 输入描述: 第一行输入整数n。 第二行输入n个整数。 输出描述: 输出排序后的n个整数。 输入样例: 4 2 3 1 23 输出样例: 3 1 23 2
好的,这是一道很基础的算法题,我会帮你解答。这里给出一种简单的思路:
1. 定义一个新数组,将奇数和偶数分别存入该数组的前半部分和后半部分。
2. 遍历原数组,将奇数存入新数组的前半部分,偶数存入新数组的后半部分。
3. 输出新数组即可。
下面是 Python 代码实现:
```python
n = int(input().strip())
array = list(map(int, input().strip().split()))
# 定义新数组
new_array = [0 for _ in range(n)]
# 遍历原数组,将奇数和偶数分别存入新数组的前半部分和后半部分
index_odd = 0
index_even = n - 1
for num in array:
if num % 2 == 1:
new_array[index_odd] = num
index_odd += 1
else:
new_array[index_even] = num
index_even -= 1
# 输出新数组
print(' '.join(map(str, new_array)))
```
希望能够帮助到你!