输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
解题思路
在数组左右定义两个索引, 左边找出偶数, 右边找出奇数, 找到后交换并让左索引右移, 右索引左移, 重复直到两个索引相遇
代码
class Solution {
public int[] exchange(int[] nums) {
if (nums == null) {
return null;
}
int len = nums.length;
// 定义两个索引, 左索引找出偶数, 右索引找出奇数
int i = 0;
int j = len - 1;
// 两个索引相遇时说明左边全是奇数, 右边全是偶数
while (i < j) {
// 如果左索引的数是奇数
if ((nums[i] & 0x1) == 1) {
i++; // 索引右移, 跳过本轮
continue;
}
// 如果右索引的数是偶数
if ((nums[j] & 0x1) == 0) {
j--; // 索引左移, 跳过本轮
continue;
}
// 代码走到这里时, i索引肯定是偶数, j索引肯定是奇数, 所以交换
swap(nums, i, j);
}
return nums;
}
public void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}