一道对时间复杂度和空间复杂度都有要求的算法题,求解?解决思路
一道对时间复杂度和空间复杂度都有要求的算法题,求解?
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度O(1),时间复杂度为O(n)。
------解决方案--------------------
两个指针,一个从左边,一个从右边
当左边是偶数,右边是奇数时交换两个数
------解决方案--------------------
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度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]