给定一个包含偶数和奇数的整数数组,按出现的顺序交换所有的偶数和奇数对。
需要稍微思考一下,用了空间O(n),时间O(n)的解法,看看行不行
private void evenOddSwap(int[] nums){
if(Objects.isNull(nums) || nums.length == 0)
return;
int n = nums.length;
Queue<Integer> queue = new LinkedList<>();
for(int i = 0; i < n; i++){
//原理:奇数加奇数等于偶数,偶数加偶数等于偶数,一个奇数一个偶数则取出交换
//所有进入queue的,要么全是奇数,要么全是偶数
if(queue.isEmpty() || (nums[i]+nums[queue.peek()])%2==0){
queue.offer(i);
}else{
swap(nums,i,queue.poll());
}
}
}
private void swap(int[] nums, int i, int j){
int num = nums[i];
nums[i] = nums[j];
nums[j] = num;
}