LeetCode刷题记录(十一):按奇偶排序数组

109 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

按奇偶排序数组

image.png

题目解析

题目素材解析

从题目的描述中来看,给出了一个整数数组。

  1. 整数数组nums。

注:此数组长度最小为1,最大为5000,数组内部的元素数值在0到5000之间。

我的解读

首先搞清这道题的结果预期是什么。

本身挺好理解的,就是将一个整数数组,进行奇数偶数的分布;将奇数排在后面,偶数排在前面。

一看这道题,就想着一次循环把所有工作都做了。

思路1:利用位置交换的方式解决,将所有的偶数移动至奇数前,有点像冒泡排序。

思路2:通过一个空数组,将奇数放置在尾部,将偶数放置在头部。

搞清其中一个就能解决这道题了。

解题思路

我当然选择的是思路2了,没有试过思路1,不知道思路1实现出来是不是会更快一些。

详细说一下思路2的实现方式:

第一步,声明一个结果数组,和两个索引值,分别是l(头部索引),r(尾部索引)。

第二步,l索引值从0开始,r索引值从素材数组长度-1开始。

第三步,开始循环遍历,在循环中通过取余的方式判断是否为偶数。

第四步,为偶数的话存入l索引值的结果数组中,并且使l加1。

第五步,为奇数的话存入r索引值的结果数组中,并且使r减1。

第六步,循环结束,返回结果数组即可。

代码

class Solution {
    public int[] sortArrayByParity(int[] nums) {
        int[] result = new int[nums.length];
        //声明首尾索引值
        int l = 0, r = nums.length - 1;
        for (int n : nums){
            if(n % 2 == 0){
                result[l] = n;
                l++;
            }else{
                result[r] = n;
                r--;
            }
        }
        return result;
    }
}

执行结果

今天的题比较简单,但是越简单的题,人们就越卷。。。

image.png

Java代码本地执行

Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。

如下图所示:

image.png