调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.
题目思路
一、头尾交换
- 指定一个头结点和尾结点。
- 当头结点不等于尾结点,执行以下顺序
- 判断头节点的数字是不是偶数,如果是偶数那么和尾结点交换
- 尾结点--
- 判断交换回来的头结点是不是还是偶数,如果是那么头结点不动继续循环
- 如果是奇数那么头结点下移一位。
public int[] exchange(int[] nums) {
//末尾下标
int tail = nums.length -1;
int head = 0;
//遍历数组,如果遇见奇数就不管
//如果遇见偶数就和后面的交换
while (head < tail){
//如果是偶数则和后面交换
if ((nums[head]) % 2 == 0){
int temp = nums[tail];
nums[tail] = nums[head];
nums[head] = temp;
tail -- ;
}
//判断还回来的是奇数还是偶数
if (nums[head] %2 != 0){
head ++;
}
}
return nums;
}
二、双指针实现
- 左右指针
- 左边当遇见偶数时停止
- 右边遇见奇数停止
- 交换两边直到左边等于右边
public int[] exchange(int[] nums){
//定义左右指针
int left = 0;
int right = nums.length -1;
//当左边指针大于等于右边指针结束
while(left < right){
//先遍历左边直到偶数出现
while((left < right)&&(nums[left] & 1 ) == 1){
left ++;
}
//然后遍历右边直到奇数出现
while ( (left < right) && (nums[right] & 1) == 0){
right --;
}
//交换两个数字
if (left< right){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
return nums;
}

浙公网安备 33010602011771号