分割一个整数数组,使得奇数在前偶数在后。
给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。
1.原地分割,不开辟新的空间,使用类似于选择排序的方式,用一个奇数指针记录当前奇数组结束为止,另外一个选择指针从后面的未分割数组中选出奇数并进行交换,然后将奇数指针后移一位
2.原地交换的两种方式
异或
int a = 10;
int b = 20;
a = a^b;
b = b^a;
a = a^b;
和差
int a = 10;
int b = 20;
a = a + b;
b = a - b;
a = a - b;
public class Solution {
/**
* @param nums: an array of integers
* @return: nothing
*/
public void partitionArray(int[] nums) {
// write your code here;
int k = 0;
int i = 0;
//首个偶数
for(i = 0; i < nums.length; i++)
{
if(nums[i] % 2 == 0)
{
k = i;
break;
}
}
//选择并交换
for(i = k + 1; i < nums.length; i++)
{
if(nums[i] % 2 != 0)
{
nums[i] = nums[i] ^ nums[k];
nums[k] = nums[k] ^ nums[i];
nums[i] = nums[i] ^ nums[k];
k++;
}
}
}
//原地交换
// public void swap(int a,int b)
// {
// a = a^b;
// b = b^a;
// a = a^b;
// }
}