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
*/