调整数组顺序使奇数位于偶数前面
链表中倒数第k个结点
http://www.nowcoder.com/questionTerminal/529d3ae5a407492994ad2a246518148a
第一种思路
使用其他容器存答案,再复制到数组array中
public class Solution { public void reOrderArray(int [] array) { //思路:用一个数组第一遍遍历存奇数,第二遍遍历存偶数 int[] a = new int[array.length]; int t=0; for(int i = 0;i<array.length;i++){ if(array[i]%2==1){ a[t++]=array[i]; } } for(int i = 0;i<array.length;i++){ if(array[i]%2==0){ a[t++]=array[i]; } } for(int i = 0;i<array.length;i++){ array[i] = a[i]; } } }第二种思路
从末尾遍历,若元素为奇数,则在该元素的左边找到最接近的偶数,使得 偶数 与 奇数元素块 互换位置
举例:12346587 首先对元素a[7]=7 8与7互换 12346578 对元素7 6与57互换 12345768 对元素7 4与57互换 12357468 对元素7 2与357互换 13572468 END!!!
public class Solution { public void reOrderArray(int [] array) { //思路:从末尾遍历,奇数与偶数互换位置 for(int i = array.length-1;i > 0;i--){ //遍历找到奇数a[i] if((array[i]%2) == 1){ for(int j = 1;j <= i;j++){ //遍历找到与a[i]左边最接近的偶数a[i-j] if((array[i-j]%2)==0){ int t = array[i-j]; for(int h = i-j;h <i;h++){ //这是偶数与奇数块(a[i]--a[i-j+1])互换 array[h] = array[h+1]; } array[i] = t;break; } } } } } }第三种思路:
类似冒泡排序
public class Solution { public void reOrderArray(int [] array) { //思路:类似冒泡排序 for(int i = 0 ; i < array.length -1 ; i++){ for(int j = array.length - 1;j > 0;j--){ if((array[j]%2==1)&&(array[j-1]%2==0)){ int t = array[j];array[j]=array[j-1];array[j-1]=t; } } } } }
------END!