zoukankan      html  css  js  c++  java
  • 按奇偶排序数组II

    按奇偶排序数组II

    给定一个非负整数数组AA中一半整数是奇数,一半整数是偶数。
    对数组进行排序,以便当A[i]为奇数时,i也是奇数;当A[i]为偶数时,i也是偶数。
    你可以返回任何满足上述条件的数组作为答案。

    示例

    输入:[4,2,5,7]
    输出:[4,5,2,7]
    解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
    

    题解

    /**
     * @param {number[]} A
     * @return {number[]}
     */
    var sortArrayByParityII = function(arr) {
        let odd = [];
        let even = [];
        arr.forEach(v => {
            if(v & 1 === 1) odd.push(v);
            else even.push(v);
        })
        let target = arr.map((v, i) => {
            if(i & 1 === 1) return odd[~~(i/2)];
            else return even[i/2];
        })
        return target;
    };
    

    思路

    本题是分配奇偶数的问题,名义上是排序,其实将奇偶数分配即可,首先遍历数组,将数组中的奇数与偶数分别取出并置入数组,之后再次遍历数组根据下标分别从奇数数组与偶数数组置入目标数组即可,使用双指针原地修改数组也可完成本题。首先分别定义奇数数组与偶数数组,之后进行遍历,如果这个数是奇数,就将其加入奇数数组,同样如果是偶数就加入偶数数组,之后进行map遍历,如果下标是奇数就将奇数数组的相应位置上的值返回,否则就返回偶数数组相应位置上的值,在这里判断奇偶性是通过位运算实现的,另外向下取整也是通过位运算隐式转换为整数,进行map遍历会生成新数组,将新数组返回即可。

    每日一题

    https://github.com/WindrunnerMax/EveryDay
    

    参考

    https://leetcode-cn.com/problems/sort-array-by-parity-ii/
    
  • 相关阅读:
    linux下ping命令出现ping: sendto: Network is unreachable
    tiny4412--linux驱动学习(2)
    tiny4412--linux驱动学习(1)
    linux-kernel-4.4 移植 (2)解决上部遗留DMA-PL330的问题
    linux-kernel-4.4 移植 (1)启动
    Busybox构建根文件系统和制作Ramdisk
    tiny4412 --Uboot移植(6) SD卡驱动,启动内核
    select响应事件
    项目总结1
    一个盒子只是显示两行
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/13965479.html
Copyright © 2011-2022 走看看