剑指OFFER笔记_21_调整数组顺序使奇数位于偶数前面_JAVA实现
题目:调整数组顺序使奇数位于偶数前面
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
解题思路
- 分别指向数组的开头和结尾元素。
- 指向开头元素的下标向后移动直到指向一个偶数。
- 指向结尾元素的下标向前移动知道指向一个奇数。
- 将两个元素互换位置。
- 继续之前前面的步骤(2-4),直到两个下标相遇。
代码
函数主体部分代码
package q21;
/**
* 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
* 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
*/
public class Solution {
public int[] exchange(int[] nums) {
if (nums == null || nums.length == 0)
{
return nums;
}
int len = nums.length;
int foreIndex = 0;
int backIndex = len-1;
//直到相遇
while (foreIndex < backIndex)
{
//找到偶数
while (foreIndex < backIndex && ((nums[foreIndex] & 1) != 0))
{
foreIndex++;
}
//找到奇数
while (foreIndex < backIndex && ((nums[backIndex] & 1) == 0))
{
backIndex--;
}
//交换
if (foreIndex < backIndex)
{
int temp = nums[foreIndex];
nums[foreIndex] = nums[backIndex];
nums[backIndex] = temp;
}
}
return nums;
}
}
测试部分代码
package q21;
public class TestApp {
public static void outputArray(int[] arr)
{
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9};
Solution s = new Solution();
outputArray(array);
outputArray(s.exchange(array));
}
}
运行结果截图
LeetCode运行截图