[牛客剑指offer]调整数组顺序使奇数位于偶数前面

链接:https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593

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

思路:时间换空间,另开一个数组保存偶数,扫描原数组,把偶数存入临时数组中,并把奇数向左移动,最后把临时数组中的偶数重新放到原数组尾部。

举例

原数组{3,4,5,7,8,2,9}

刚开始是这样:

从左往右扫描,第一个数是3,奇数,把3放入到插入指针处(其实就是原地),然后把插入指针往右移动,扫描指针也往右移动。

于是:

 

现在扫描到4,是偶数,把它放入临时数组,并把扫描指针右移。

 于是:

 

现在扫描到5,是奇数,把5放到插入指针处,然后把插入指针往右移动,扫描指针也往右移动。

于是:

扫描到7,是奇数,把7放到插入指针处,然后把插入指针往右移动,扫描指针也往右移动。

于是:

现在扫描到8,是偶数,把它放入临时数组,并把扫描指针右移。

于是:

再然后:

最后:

至此,已经完成了奇数左移和偶数选出。

接下来把临时数组的偶数放入原数组即可。

代码

 1 /**
 2  * @author yuan
 3  * @version 0.1
 4  * @date 2019/6/6
 5  */
 6 public class ReOrderArray {
 7 
 8     public static void print(int[] array) {
 9         for (int i = 0; i < array.length; i++) {
10             System.out.print(array[i]);
11             if (i == array.length - 1) {
12                 System.out.println();
13             } else {
14                 System.out.print(" ");
15             }
16         }
17     }
18 
19     public static void reOrderArray(int[] array) {
20         // 保存偶数
21         int[] temp = new int[array.length];
22         // 当前偶数数量
23         int count = 0;
24         // 当前填入位置,第一轮for循环用于奇数左移,第二轮用于填入偶数
25         int pos = 0;
26         for (int i = 0; i < array.length; i++) {
27             if ((array[i] & 1) == 0) {
28                 temp[count++] = array[i];
29             } else {
30                 array[pos++] = array[i];
31             }
32         }
33         for (int i = 0; i < count; i++) {
34             array[pos++] = temp[i];
35         }
36     }
37 
38     public static void main(String[] args) {
39         int[] array = new int[]{3, 4, 5, 7, 8, 2, 9};
40         print(array);
41         reOrderArray(array);
42         print(array);
43     }
44 }

猜你喜欢

转载自www.cnblogs.com/null-0/p/10988709.html
今日推荐