持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情
按奇偶排序数组
这是力扣第905题
给你一个整数数组
nums,将nums中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。
解题思路
这是一道简单题,题意清晰明了。数组类的题目都不会太难,大部分都是通过那几种方法来解决,比如暴力遍历,双指针等等,都是一些常见的思路,接下来就来详细介绍一下这些方法。
双指针法
双指针法就很常见了,首先创建两个指针,然后让左指针从左往右移动,直到遇到第一个奇数,右指针从右往左移动,直到遇到第一个偶数,最后交换位置即可。这种方法比较简单且通俗易懂。
相关代码如下:
var sortArrayByParity = function(nums) {
let start = 0, end = nums.length-1
while(start < end){
while(start<end && nums[start]%2 ==0) start++
while(start<end && nums[end]%2 !==0) end--
if(start < end){
let tmp=nums[start]
nums[start]=nums[end]
nums[end]=tmp
start++
end--
}
}
return nums
};
API法
此法顾名思义,就是通过调用 js 中的 API 来解决问题。数组中的 filter() 方法遍历可以进行筛选遍历,concat() 方法可以将偶数数组和奇数数组进行拼接。所以通过这两个方法就可以完成整体的要求。
相关代码如下:
var sortArrayByParity = function(nums) {
let arr1 = []
let arr2 = []
arr1 = nums.filter( item => item % 2 == 0)
arr2 = nums.filter(item => item % 2 != 0)
return arr1.concat(arr2)
};
暴力遍历法
都介绍双指针法,怎么能少了暴力法?暴力法就是循环遍历,在此题中,需要遍历两次数组。首先我们新建一个数组 temp 来保存最终返回的结果。然后开始遍历两次数组,第一次遍历时把所有偶数依次放入到 temp 中,第二次遍历时把所有奇数依次放入到 temp 中,最后返回最终数组即可。
相关代码如下:
var sortArrayByParity = function(nums) {
let n = nums.length, index = 0;
const temp = new Array(n).fill(0);
for (const num of nums) {
if (num % 2 === 0) {
temp[index++] = num;
}
}
for (const num of nums) {
if (num % 2 === 1) {
temp[index++] = num;
}
}
return temp;
};
总结
以上就是对 力扣 905 题按奇偶排序数组 的解法和思路。这是我的一些做题记录,希望可以为正在刷题的你提供一些帮助。如有不足欢迎各位在评论区指正。