zoukankan      html  css  js  c++  java
  • 9、调整数组顺序使奇数位于偶数前面------------>剑指offer系列

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

    思路

    首先寻找第一个奇数,取出,然后将第一个奇数之前的元素全部往后移一位,讲找到的第一个奇数放在0号位置。

    依次在第一个奇数之后的元素中寻找奇数,并做移动操作。就可以保证原来的相对顺序。

    function reOrderArray(array)
    {
        let j=0;
        let m=0;
        for(let i=0;i<array.length;i++){
            if(array[i]%2==1){
                let temp=array[i];
                let ti=i;
                for(;ti>0;ti--){
                    array[ti]=array[ti-1]
                }
                array[0]=temp;
                j=i;
                break;
            }
        }
        for(++j;j<array.length;j++){
            if(array[j]%2==1){
                let temp=array[j];
                let tj=j;
                for(;tj>m;tj--){
                    array[tj]=array[tj-1];
                }
                array[++m]=temp;
            }
        }
        return array;
    }

    如果不需要考虑相对位置则:

    思路

    设定两个指针

    第一个指针start从数组第一个元素出发,向尾部前进

    第二个指针end从数组的最后一个元素出发,向头部前进

    start遍历到偶数,end遍历到奇数时,交换两个数的位置

    当start>end时,完成交换

    代码

        function reOrderArray(array) {
          if (Array.isArray(array)) {
            let start = 0;
            let end = array.length - 1;
            while (start < end) {
              while (array[start] % 2 === 1) {
                start++;
              }
              while (array[end] % 2 === 0) {
                end--;
              }
              if (start < end) {
                [array[start], array[end]] = [array[end], array[start]]
              }
            }
          }
          return array;
        }


  • 相关阅读:
    初识 Image,region,xld(1)
    Opencv 滤波<11>
    Opencv 掩模<10>
    事件
    Ubuntu16 安装Anaconda3+tensorflow cpu版
    Windows10:Opencv4.0+Opencv4.0.1_contrib编译
    Qt5连接Mysql环境配置
    Qt5显示中文字符
    如何为多个VLAN配置DHCP?
    二层网络架构,接入交换机和核心交换机
  • 原文地址:https://www.cnblogs.com/QianDingwei/p/10927718.html
Copyright © 2011-2022 走看看