题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
思路:
这道题思路很简单,用双指针,指针i
从数组头出发,指针j
从数组尾出发,当i
遇到奇数时往后走,遇到偶数停下,当j
遇到偶数时往前走,遇到奇数时停下,都停下时交换两个数,直到两指针相遇。
- 注:可以用
(nums[i] & 1) == 1)
判断是否是奇数,因为奇数的二进制表示最后一位一定为1, 2 0 = 1 2^{0}=1 20=1,同理,可以判断偶数。
代码:
class Solution {
public int[] exchange(int[] nums) {
int i = 0, j = nums.length - 1;
while (i < j) {
while (i < j && ((nums[i] & 1) == 1)) i++;
while (i < j && ((nums[j] & 1) == 0)) j--;
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
return nums;
}
}