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, 简单题
优化就看时间和空间复杂度了, 直接原地交换会更省空间
<?php/*** Created by PhpStorm* User: jtahstu* Time: 2022/4/28 00:58* Des: 905. 按奇偶排序数组* https://leetcode-cn.com/problems/sort-array-by-parity/* 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。* 返回满足此条件的 任一数组 作为答案。*/class Solution{/*** @param Integer[] $nums* @return Integer[]*/function sortArrayByParity($nums){$i = 0;$j = count($nums)-1;while ($i < $j) {if ($nums[$i] % 2 === 0) {$i++;continue;}if ($nums[$j] % 2 === 1) {$j--;continue;}$t = $nums[$i];$nums[$i] = $nums[$j];$nums[$j] = $t;}return $nums;}//简单写法, 存一下然后拼起来function sortArrayByParity2($nums){$j = $o = [];foreach ($nums as $num) {if ($num % 2 == 0) {$o[] = $num;} else {$j[] = $num;}}return array_merge($o, $j);}}print_r((new Solution())->sortArrayByParity([4, 3, 2, 6]));/*** 2边推进的方式速度快, 原地交换内存占用也少* 执行用时:20 ms, 在所有 PHP 提交中击败了100.00%的用户* 内存消耗:19.8 MB, 在所有 PHP 提交中击败了71.43%的用户* 通过测试用例:285 / 285*/
