华为机试:调整数组顺序使奇数位于偶数前面

题目描述

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


实现如下:

方法1:

 
  
//时间复杂度为O(n^2),空间复杂度为O(1)
public class Solution { public void reOrderArray(int [] array) { if(array.length<=1){ return; } boolean b=true; while(b){ b=false; for(int i=1; i<array.length; i++){ int a1=array[i-1]%2; int a2=array[i]%2; int temp; if(a1==0 && a2!=0){ temp=array[i-1]; array[i-1]=array[i]; array[i]=temp; b=true; } } } } }
方法2:

 
  
//时间复杂度为O(n),空间复杂度为O(n)
public class Solution { public void reOrderArray(int [] array) { if(array==null || array.length==0){ return; } int[] res=new int[array.length]; int i=0; for(int j=0; j<array.length; j++){ if((array[j] & 1)!=0){ res[i]=array[j]; i++; } } for(int j=0; j<array.length; j++){ if((array[j] & 1)==0){ res[i]=array[j]; i++; } } for(int j=0; j<array.length; j++){ array[j]=res[j]; } } }


猜你喜欢

转载自blog.csdn.net/karute/article/details/80041874