• 调整数组顺序使奇数位于偶数前面


    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
     
    思路:
      一:1、找位置:evenPoint从左往右找第一个偶数,oddPoint从evenPoint+1的位置找第一个奇数
        2、进行移动:将下标为eventPoint,evenPoint+1,。。。,oddPoint-1的数据整体向右移动一位,最后将找到的oddPoint位置的奇数放到evenPoint的位置
        3、终止条件:evenPoint向后查找失败
    class Solution {
    public:
        void reOrderArray(vector<int> &array) {
            if(array.empty())
            {
                return;
            }
            int oddPoint,evenPoint=0;
            int size = array.size();
             
            while(evenPoint < size)
            {
                while(evenPoint < size && !isEven(array[evenPoint]))
                {
                    evenPoint++;
                }
                oddPoint = evenPoint+1;
                while(oddPoint < size && isEven(array[oddPoint]))
                {
                    oddPoint++;
                }
                if(oddPoint < size)
                {
                    int temp = array[oddPoint];
                    for(int i = oddPoint -1;i >= evenPoint;i--)
                    {
                        array[i+1] = array[i];
                    }
                    array[evenPoint++] = temp;
                }
                else
                {
                    break;
                }
            }
             
        }
        bool isEven(int n)
        {
            if(n % 2 == 0)
                return true;
            return false;
        }
    };

      二、利用vector容器的特点实现该功能,首先将单独将奇数、偶数进行分开重组,然后再放回到array vector容器中

    class Solution {
    public:
        void reOrderArray(vector<int> &array) {
            if(array.empty())
            {
                return ;
            }
            vector<int> temp;
            int size = array.size();
            for(int i =0;i < size;i++)
            {
                if(array[i] % 2 == 1)
                {
                    temp.push_back(array[i]);
                }
            }
            for(int i =0;i < size;i++)
            {
                if(array[i] % 2 ==0)
                {
                    temp.push_back(array[i]);
                }
            }
            array.clear();
            for(int i = 0;i < temp.size();i++)
            {
                array.push_back(temp[i]);
            }
        }
    };
  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12489499.html
Copyright © 2020-2023  润新知