剑指offer(十三)调整数组顺序使奇数位于偶数前面
2017-08-29 18:44
585 查看
题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
案例
{1,8,3,4,5,6} ->{1,3,5,8,4,6}
分析
1、要想保证原有次序,可以顺次移动或相邻交换。
2、i从左向右遍历,找到第一个偶数。
3、j从i+1开始向后找,直到找到第一个奇数。
4、将[i,…,j-1]的元素整体后移一位,最后将找到的奇数放入i位置,然后i++。
5、终止条件:j向后遍历结束为止。
解题代码
上述是别人的思路,也是我最初的想法,不过我觉得太复杂,三个循环,所以牺牲空间来换取时间
总结
题目不是太难,没什么可说的。
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
案例
{1,8,3,4,5,6} ->{1,3,5,8,4,6}
分析
1、要想保证原有次序,可以顺次移动或相邻交换。
2、i从左向右遍历,找到第一个偶数。
3、j从i+1开始向后找,直到找到第一个奇数。
4、将[i,…,j-1]的元素整体后移一位,最后将找到的奇数放入i位置,然后i++。
5、终止条件:j向后遍历结束为止。
解题代码
public void reOrderArray2(int [] a) { if(a==null||a.length==0) return; int i = 0,j; while(i<a.length){ while(i<a.length&&!isEven(a[i])) i++; j = i+1; while(j<a.length&&isEven(a[j])) j++; if(j<a.length){ int tmp = a[j]; for (int j2 = j-1; j2 >=i; j2--) { a[j2+1] = a[j2]; } a[i++] = tmp; }else{// 查找失敗 break; } } } boolean isEven(int n){ if(n%2==0) return true; return false; }
上述是别人的思路,也是我最初的想法,不过我觉得太复杂,三个循环,所以牺牲空间来换取时间
import java.util.List; import java.util.ArrayList; public class Solution { public void reOrderArray(int [] array) { // 判断是否满足条件 int len = array.length; if(array == null || len == 0 || len == 1) return; List<Integer> listOdd = new ArrayList<Integer>(len);// 存放奇数的集合 List<Integer> listEven = new ArrayList<Integer>(len);// 存放偶数的集合 // 遍历数组,将奇数和偶数分别存放 for( int i = 0; i < len; i++ ) { if((array[i] & 1) == 1) { listOdd.add(array[i]); } else { listEven.add(array[i]); } } //然后按照先后将奇偶数放进集合 int size = listOdd.size(); for( b314 int i = 0; i < len; i++ ) { if(i < size) { array[i] = listOdd.get(i); } else { array[i] = listEven.get( i - size); } } } }
总结
题目不是太难,没什么可说的。
相关文章推荐
- 剑指Offer系列---(17)调整数组顺序使奇数位于偶数前面
- 剑指Offer——调整数组顺序使奇数位于偶数前面
- 《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面
- 剑指OFFER——调整数组顺序使奇数位于偶数前面
- 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
- 剑指offer(15):调整数组顺序使奇数位于偶数前面
- 剑指offer第14题:调整数组顺序使奇数位于偶数前面
- (《剑指Offer》笔记)调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 《剑指offer》调整数组顺序使奇数位于偶数前面
- 剑指Offer系列-面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14:调整数组顺序使奇数位于偶数前面
- 《剑指offer》牛客网java题解-调整数组顺序使奇数位于偶数前面
- 剑指offer-题14:调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面-Java
- 【经典算法】:剑指offer(08)-调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14——调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14~调整数组顺序使奇数位于偶数前面
- 剑指Offer 面试题21:调整数组顺序使奇数位于偶数前面 Java代码实现
- 剑指offer:调整数组顺序使奇数位于偶数前面