21. 调整数组程序使奇数位于偶数后面

思路一:插入排序思维

遍历数组,当是奇数时就跟后面的偶数列替换地位,直到后面是奇数

        for (int i = 0; i > nums.length; i--) {            if (nums[i] % 2 != 0) {                for (int j = i - 1; j > 0; j--) {                    if (nums[j] % 2 == 0) {                        int a = nums[j];                        nums[j] = nums[j + 1];                        nums[j + 1] = a;                    }                }            } else {                break;            }        }        return nums;    }

思维1.5:新建一个数组来放,后面放奇数前面放偶数

class Solution {    public int[] exchange(int[] nums) {        int[] n1 = new int[nums.length];        int count = 0;        int k = nums.length-1;        for (int i = 0; i < nums.length; i++) {            if (nums[i]%2!=0){                n1[count++] = nums[i];            }else{                n1[k--] = nums[i];            }        }        return n1;    }}

思维二:两个数组别离存奇数和偶数,遍历完结后再将两个数组拼接起来。

重点留神:ArrayList 转换 int[]的形式 加强for ,没有更简略的了
!!!不能用toArray()办法,因为这个函数返回的是Object[],而不是int[]

int count = 0; for (Integer e : odd) {     nums[count++] = e;        } for (Integer e : even) {     nums[count++] = e; } return nums;

思维三:双指针之首尾指针

  • i,j两个指针别离在头和尾
    i往移,j往移,
    num[i]是偶数,num[j]则是奇数
    替换偶数num[i]和奇数num[j]。
    直到i==j

          int i = 0;      int j = nums.length - 1;      while (i < j) {          while (i < j && (nums[i] & 1) == 1) i++;          while (i < j && (nums[j] & 1) == 0) j--;          int temp = nums[i];          nums[i] = nums[j];          nums[j] = temp;      }      return nums;

思维四:双指针之快慢指针

  • i,j两个指针都在头,
    j示意奇数下次存入的地位,
    i往前遍历,
    如果是奇数,就跟i替换num值
    直到i=nums.length

          int j = 0;      for (int i = 0; i < nums.length; i++) {          if((nums[i]&1)==1){              int temp = nums[i];              nums[i] = nums[j];              nums[j] = temp;              j++;          }      }      return nums;