问题描述:
把数组里的偶数移到左侧,奇数移到右侧,顺序不限
思路:
这道题虽然没说原位操作,但是应该尽量少用空间
既然涉及两端,我们自然想到双指针,起始状态指向两端。如果出现左奇右偶的情况,我们需要给他们换位。指针移动基于以下条件:若左侧指针指向偶数,则左指针+1;若·右侧指针指向奇数,则右指针-1.
代码如下:
class Solution {
public int[] sortArrayByParity(int[] nums) {
int left=0;
int right=nums.length-1;
while(left<right){
if(nums[left]%2>nums[right]%2){ //左奇右偶,巧妙比较
int temp;
temp=nums[right];
nums[right]=nums[left];
nums[left]=temp;
}
if(nums[left]%2==0) left++;
if(nums[right]%2==1) right--;
}
return nums;
}
}
时间复杂度: O(n)