1. 题目描述

https://leetcode-cn.com/problems/sort-array-by-parity/
给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
返回满足此条件的 任一数组 作为答案。
示例 1:
输入:nums = [3,1,2,4]
输出:[2,4,3,1]
解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。
示例 2:
输入:nums = [0]
输出:[0]
提示:
1 <= nums.length <= 5000
0 <= nums[i] <= 5000

2. 题解

2022-04-28 AC, 简单题
优化就看时间和空间复杂度了, 直接原地交换会更省空间

  1. <?php
  2. /**
  3. * Created by PhpStorm
  4. * User: jtahstu
  5. * Time: 2022/4/28 00:58
  6. * Des: 905. 按奇偶排序数组
  7. * https://leetcode-cn.com/problems/sort-array-by-parity/
  8. * 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
  9. * 返回满足此条件的 任一数组 作为答案。
  10. */
  11. class Solution
  12. {
  13. /**
  14. * @param Integer[] $nums
  15. * @return Integer[]
  16. */
  17. function sortArrayByParity($nums)
  18. {
  19. $i = 0;
  20. $j = count($nums)-1;
  21. while ($i < $j) {
  22. if ($nums[$i] % 2 === 0) {
  23. $i++;
  24. continue;
  25. }
  26. if ($nums[$j] % 2 === 1) {
  27. $j--;
  28. continue;
  29. }
  30. $t = $nums[$i];
  31. $nums[$i] = $nums[$j];
  32. $nums[$j] = $t;
  33. }
  34. return $nums;
  35. }
  36. //简单写法, 存一下然后拼起来
  37. function sortArrayByParity2($nums)
  38. {
  39. $j = $o = [];
  40. foreach ($nums as $num) {
  41. if ($num % 2 == 0) {
  42. $o[] = $num;
  43. } else {
  44. $j[] = $num;
  45. }
  46. }
  47. return array_merge($o, $j);
  48. }
  49. }
  50. print_r((new Solution())->sortArrayByParity([4, 3, 2, 6]));
  51. /**
  52. * 2边推进的方式速度快, 原地交换内存占用也少
  53. * 执行用时:20 ms, 在所有 PHP 提交中击败了100.00%的用户
  54. * 内存消耗:19.8 MB, 在所有 PHP 提交中击败了71.43%的用户
  55. * 通过测试用例:285 / 285
  56. */