问题描述:
给你一个整数数组 nums
,将 nums
中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
返回满足此条件的 任一数组 作为答案。
示例:
分析:
使用一个长度与nums相等的新数组存储排好序的整数。遍历nums,遇到偶数便将其存放进新数组的前面(从0下标开始),遇到奇数便将其存储至新数组后面(从下标nums.length - 1 开始)。
判断是偶数还是奇数的方法这里不用除二取余,可以使用位运算。因为偶数的二进制最后一位数字一定是0,而奇数的二进制最后一位数字一定是1。
那么将数组中各个整数 & 1,因为在 & 运算中只有当对应的两个二进制数的对应数字都为 1 时,结果才是1。所以如果对数组中某个数进行 & 运算之后的结果为1,那么该数肯定是奇数。反之,如果结果为0,那么该数肯定是偶数。
具体的位运算细节可以参考这篇博客:
代码实现:
class Solution {
public int[] sortArrayByParity(int[] nums) {
int[] sortedArray = new int[nums.length];
int leftIndex = 0, rightIndex = nums.length - 1;
for (int i = 0; i < nums.length; i++) {
if ((nums[i] & 1) == 0)
sortedArray[leftIndex++] = nums[i];
else if ((nums[i] & 1) == 1)
sortedArray[rightIndex--] = nums[i];
}
return sortedArray;
}
}