面试题 21. 调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
解法
方法一:双指针
我们定义两个指针 \(i\) 和 \(j\),其中指针 \(i\) 指向当前元素,指针 \(j\) 指向当前最后一个奇数的下一个位置。
接下来,我们从左到右遍历数组,当 \(nums[i]\) 是奇数时,我们将其与 \(nums[j]\) 交换,然后指针 \(j\) 向右移动一位。指针 \(i\) 每次向右移动一位,直到遍历完整个数组。
时间复杂度 \(O(n)\),空间复杂度 \(O(1)\)。其中 \(n\) 是数组的长度。
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|