剑指Offer:调整数组顺序使奇数位于偶数前面

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

分析

大致思路是,先统计出奇数的个数(因为奇数需要放在前面),然后再建一个等大小的数组,设置两个指针,奇数指针从0开始,偶数指针从奇数个数的后面开始,之后一边遍历原数组,一边在新数组中填数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Solution {
public void reOrderArray(int [] array) {
int odd = 0;
int lenght = array.length;
int[] arr = new int[lenght];
for (int i = 0; i < lenght; i ++) // 记录奇数的个数
if ((array[i]&1) == 1)
odd ++;

int k = 0, i = 0, j = odd;
while (k < lenght) {
if ((array[k]&1) == 1)
arr[i ++] = array[k];
else
arr[j ++] = array[k];
k ++;
}
for (int ii = 0; ii < lenght; ii ++)
array[ii] = arr[ii];
}
}
请我一杯酸奶?
------ 本文结束感谢您的阅读-------------
0%