剑指offer 13.调整数组顺序使奇数位于偶数前面
Posted hi3254014978
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 13.调整数组顺序使奇数位于偶数前面相关的知识,希望对你有一定的参考价值。
13.调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路一:
定义一个等长的数组,遍历两次数组,第一次存奇数,第二次存偶数,最后把临时数组的内存拷贝到数组中
1 public class Solution { 2 public void reOrderArray(int [] array) { 3 // 定义一个等长的数组, 4 int[] temp = new int[array.length]; 5 // 遍历两次数组,第一次存奇数,第二次存偶数 6 // 从前往后找出奇数,存入0 下标开始存, 7 int index = 0; // 临时数组的当前下标 8 for(int i = 0; i < array.length; i++){ 9 if((array[i] & 1) != 0){ 10 temp[index++] = array[i]; 11 } 12 } 13 14 for(int i = 0; i < array.length; i++){ 15 if((array[i] & 1) == 0){ 16 temp[index++] = array[i]; 17 } 18 } 19 // 把临时数组拷贝会原来的数组 20 for(int i = 0; i < array.length; i++){ 21 array[i] = temp[i]; 22 } 23 24 } 25 }
思路二:
遍历数组,把上一个奇数到当前奇数之间的偶数后移一位,把当前奇数填到上一个奇数后面,更新当前奇数的位置
1 public class Solution { 2 public void reOrderArray(int [] array) { 3 // 遍历数组 4 int m = -1; // 当前奇数的位置 5 for(int i = 0; i < array.length; i++){ 6 7 // 如果是奇数, 记录下这个值,将 (i + 1) - j 的元素都后移一位 8 if((array[i] & 1) != 0){ 9 int j = i; 10 int temp = array[j]; 11 while(j > m + 1){ 12 array[j] = array[j - 1]; 13 j--; 14 } 15 m = j; // 更新当前奇数的位置 16 array[j] = temp; 17 } 18 } 19 } 20 }
以上是关于剑指offer 13.调整数组顺序使奇数位于偶数前面的主要内容,如果未能解决你的问题,请参考以下文章