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

本文介绍了一种简单有效的算法,用于将整数数组中的奇数和偶数进行分离,使得所有奇数位于数组的前半部分,所有偶数位于后半部分。通过使用双指针技术,该算法在原地实现了这一目标,无需额外的空间复杂度。
2468

被折叠的 条评论
为什么被折叠?



