LeetCode 905 按奇偶排序数组
https://leetcode-cn.com/problems/sort-array-by-parity/
双指针
这个题目让我想起了快速排序算法。快速排序算法有一个步骤是设置两个指针分别指向数组的首部和尾部位置,只要满足条件则两个指针分别往中间靠拢,一旦两个指针都不满足条件了,则交换两个指针所指向的内容。我感觉在这里也可以把这个过程给借鉴过来。
题目要求把数组中的偶数放在前半部分,奇数放在后半部分。那我们可以设置两个指针i
和j
,分别指向首部和尾部。对于指针i
来说,只要它所指元素是偶数就往前移动,直到遇到一个奇数停下;对于指针j
来说,只要它所指的元素是奇数就往后移动,直到遇到一个偶数停下;然后交换指针i
和j
所指向的元素。循环执行以上的步骤,循环的条件是i < j
。
代码如下:
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& A) {
int i = 0;
int j = A.size() - 1;
while (i < j) {
while (A[i] % 2 == 0 && i < j) ++i;
while (A[j] % 2 == 1 && i < j) --j;
swap(A[i], A[j]);
}
return A;
}
};