一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
按奇偶排序数组
题目解析
题目素材解析
从题目的描述中来看,给出了一个整数数组。
- 整数数组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;
}
}
执行结果
今天的题比较简单,但是越简单的题,人们就越卷。。。
Java代码本地执行
Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。
如下图所示: