当前位置:  首页>> 技术小册>> 数据结构与算法(下)

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

解法

解法一

计算出奇数的个数,就很容易写出来了。

  1. import java.util.Arrays;
  2. /**
  3. * @author bingo
  4. * @since 2018/11/21
  5. */
  6. public class Solution {
  7. /**
  8. * 调整数组元素顺序,使得奇数元素位于偶数元素前面,且保证奇数和奇数,偶数和偶数之间的相对位置不变。
  9. * @param array 数组
  10. */
  11. public void reOrderArray(int [] array) {
  12. if (array == null || array.length < 2) {
  13. return;
  14. }
  15. int numsOfOdd = 0;
  16. for (int val : array) {
  17. if (val % 2 == 1) {
  18. ++numsOfOdd;
  19. }
  20. }
  21. int[] bak = Arrays.copyOf(array, array.length);
  22. int i = 0, j = numsOfOdd;
  23. for (int val : bak) {
  24. if (val % 2 == 1) {
  25. array[i++] = val;
  26. } else {
  27. array[j++] = val;
  28. }
  29. }
  30. }
  31. }

解法二

  1. import java.util.Arrays;
  2. public class Solution {
  3. public void reOrderArray(int [] array) {
  4. if (array == null || array.length < 2) {
  5. return;
  6. }
  7. Integer[] bak = new Integer[array.length];
  8. Arrays.setAll(bak, i -> array[i]);
  9. Arrays.sort(bak, (x, y) -> (y & 1) - (x & 1));
  10. Arrays.setAll(array, i -> bak[i]);
  11. }
  12. }

测试用例

  1. 功能测试(输入数组中的奇数、偶数交替出现;输入的数组中所有偶数都出现在奇数的前面;输入的数组中所有偶数都出现在奇数的前面;输入的数组中所有奇数都出现在偶数的前面);
  2. 特殊输入测试(输入空指针;输入的数组只包含一个数字)。

该分类下的相关小册推荐: