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


    题目描述

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

    思路

    题目要求不改变调整前后奇偶元素之间的相对位置。所以可以借鉴冒泡的思路。
    即:当遍历到元素x为偶数时,将其调整到数组最后一位,此时,需要判断原数组x之后的一个数的奇偶情况,如果该数为偶数,则继续调整这个数,如果该数为奇数则跳过该数判断下一个元素。
    class Solution {
    public:
        void reOrderArray(vector<int> &array) {
            if (array.empty())
                return;
            int n = array.size();
            int tmp = 0;
            for (int i = 0; i < n-tmp; )
            {
                if (array[i] % 2 == 0)
                {
                    for (int j = i+1; j < n; ++j)
                    {
                        swap(array[j], array[j-1]);
                    }
                    tmp++;
                }
                if (array[i] % 2 != 0)
                    i++;
            }
        }
    };

     同上利用冒泡排序,该思路交换次数较少,从后向前遍历,如果j-1为偶,j为奇,则交换,否则跳过。

    class Solution {
    public:
        void reOrderArray(vector<int> &array) {
            if (array.empty())
                return;
            int n = array.size();
            for (int i = 0; i < n; ++i)
            {
                for (int j = n-1; j > i; --j)
                {
                    if (array[j-1] % 2 == 0 && array[j] % 2 != 0)
                        swap(array[j-1], array[j]);
                }
            }
        }
    };

    利用vector临时数组来存储偶数值,遍历时找出偶数后并删除放入临时数组中,遍历结束后然后将临时数组中元素放入原数组的尾部。

    class Solution {
    public:
        void reOrderArray(vector<int> &array) {
            if (array.empty())
                return;
            vector<int> tmp;
            for (auto it = array.begin(); it != array.end(); ++it)
            {
                if (*it % 2 == 0)
                {
                    tmp.push_back(*it);
                    it = array.erase(it);
                    it--;
                }
            }
            for (auto it = tmp.begin(); it != tmp.end(); ++it)
                array.push_back(*it);
        }
    };
  • 相关阅读:
    CH负责内容的两个人——北漂18年(66)
    perl 跨行匹配;
    elk之nginx
    perl 分析binlog 定位错误sql 思路
    rsyslog 日志格式和输出
    rsyslog 定义模板
    rsyslog ~ 波浪号
    过滤器
    rsyslog masg和rawmsg的区别
    金融行业的BI应用分析
  • 原文地址:https://www.cnblogs.com/immjc/p/9162539.html
Copyright © 2020-2023  润新知