题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:输入:nums = [1,2,3,4],输出:[1,3,2,4] ,注:[3,1,2,4] 也是正确的答案之一。
题目解析
【分析】
1、首先判断输入的数组是否为null,如果为null直接返回null
2、定义两个指针start、end分别指向数组的开头和结尾
3、当start<end时:
1)当start<end且nums[start]不是偶数时,start++;
2)当start<end且nums[end]不是奇数时,end–;
4、如果nums[start]是偶数、nums[end]是奇数且start<end时,交换nums[start]、nums[end]
5、然后start++、end–,继续执行第3步
6、最后返回数组即可
【代码实现】
public int[] exchange(int[] nums) {
if(nums == null){
return nums;
}
int start = 0;
int end = nums.length - 1;
while (start < end){
while(start < end && !isEven(nums[start])){
start++;
}
while(start < end && isEven(nums[end])){
end--;
}
if(start < end){
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
}
start++;
end--;
}
return nums;
}
public boolean isEven(int n){
return (n & 1) == 0;
}