算法系列——调整数组顺序使奇数位于偶数前面
2017-08-25 16:57
281 查看
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路
提供以下下两种方法相对位置不发生变化
可以创建两个数组,分别存储原数组中奇数和偶数,然后在复制到原数组当中。空间复杂度为O(n),时间复杂度为O(n)
相对位置发生变化
双指针法1. 使指针l 向后遍历,直到指向的整数为偶数;
2. 使指针r 向前遍历,直到指向的整数为奇数;
3. 交换指针l 和指针r 所指向的元素。
4. 在 l 和 r 相遇之前,l继续向后遍历,r继续向前遍历。
空间复杂度为O(1),时间复杂度为O(n),会改变元素的相对位置。
程序实现
相对位置不发生变化
空间复杂度为O(n),时间复杂度为O(n)public class Solution { public void reOrderArray(int [] array) { int len=array.length; int count1=0; int count2=0; int[] arr1=new int[len]; int[] arr2=new int[len]; for(int i=0;i<len;i++){ if(array[i]%2==0){ arr2[count2++]=array[i]; }else{ arr1[count1++]=array[i]; } } for(int i=0;i<count1;i++){ array[i]=arr1[i]; } for(int i=0;i<count2;i++){ array[count1+i]=arr2[i]; } } }
相对位置发生变化
空间复杂度为O(1),时间复杂度为O(n)public void reOrderArray(int [] array) { if(array==null||array.length==0) return; int l=0; int r=array.length-1; while(l<r){ while(l<r&&array[l]%2!=0) l++; while(l<r&&array[r]%2==0) r--; if(l<r) swap(array,l,r); } } private void swap(int[]array,int i,int j){ int temp=array[i]; array[i]=array[j]; array[j]=temp; }
相关文章推荐
- 剑指Offer系列---(17)调整数组顺序使奇数位于偶数前面
- 【剑指offer系列】 调整数组顺序使奇数位于偶数前面___14
- 经典算法——调整数组顺序使奇数位于偶数前面
- 数据结构——算法之(026)( 调整数组顺序使奇数位于偶数前面)
- 程序员面试题精选100题(29)-调整数组顺序使奇数位于偶数前面[算法]
- 剑指offer-算法题练习:part15 调整数组顺序使奇数位于偶数前面
- 面试算法(十三)调整数组顺序使奇数位于偶数前面
- 剑指offer系列源码-调整数组顺序使奇数位于偶数前面
- 剑指Offer系列-面试题14:调整数组顺序使奇数位于偶数前面
- 程序员面试题精选100题(29)-调整数组顺序使奇数位于偶数前面[算法]
- 剑指offer系列之12:调整数组的顺序使奇数位于偶数前面
- 算法题/调整数组顺序使奇数位于偶数前面
- 一道算法题——调整数组顺序使奇数位于偶数前面
- 剑指offer系列之十二:调整数组顺序使奇数位于偶数前面
- 剑指offer系列-T14_1调整数组顺序使奇数位于偶数前面
- 【经典算法】:剑指offer(08)-调整数组顺序使奇数位于偶数前面
- 算法题目---调整数组顺序使奇数位于偶数前面
- 重拾算法之剑指Offier——调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面