922. Sort Array By Parity II
思路:
可以用两个数组分别存奇数和偶数元素,然后再对原数组遍历,当下标为奇数就从存放奇数的数组拿出一个,当下标为偶数时就从偶数的数组拿出一个。
时间复杂度O(n),空间复杂度O(n)
另一个是原地算法,用两个指针,一个检测奇数位是否有偶数,另一个检测偶数位是否有奇数。
首先先用检测偶数位的指针遍历,发现偶数位有奇数则停下来用检测奇数位的指针寻找有偶数的奇数位,找到后就将两个数进行交换,因为偶数和奇数数量相同,那么自然偶数换好后,奇数也排列好了。
原地算法空间复杂度就为O(1)
代码:
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
int n=nums.size();
int odd=1;
for(int i=0;i<n;i+=2){
if(nums[i]%2==1){ //偶数位发现奇数
while(nums[odd]%2==1){ //目的是要在奇数位找到偶数
odd+=2;
}
swap(nums[i],nums[odd]);
}
}
return nums;
}
};