乐趣区

关于java:21-调整数组顺序使奇数位于偶数前面双指针首尾指针快慢指针插入排序

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;
退出移动版