读书人

一道对时间复杂度和空间复杂度都有要求

发布时间: 2012-03-13 11:21:10 作者: rapoo

一道对时间复杂度和空间复杂度都有要求的算法题,求解?
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度O(1),时间复杂度为O(n)


[解决办法]
两个指针,一个从左边,一个从右边
当左边是偶数,右边是奇数时交换两个数
[解决办法]

Java code
public int[] process(int[] array){        int j=1;        for(int i=0;i<array.length-1;i++){            if(j<array.length){                if(array[i]%2==0){                    if(array[j]%2!=0){                        swap(array,i,j);                    }                    else{                        j++;                        i--;                    }                }            }        }        return array;    }    public void swap(int[] array,int a,int b){        int temp=array[a];        array[a]=array[b];        array[b]=temp;    }    public static void main(String[] args) {        int[] a={2,5,4,3,9,7,6,3,1};        int[] b=new Array().process(a);        System.out.println(Arrays.toString(b));    }结果打印:[5, 3, 9, 7, 3, 1, 6, 4, 2] 

读书人网 >软件架构设计

热点推荐