• [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);
        }
    };
  • 相关阅读:
    lock,Monitor,Mutex的区别
    byte[]数组和int之间的转换
    接口测试总结
    python接口自动化测试(七)unittest 生成测试报告
    python 接口自动化测试(六)使用unittest 批量用例管理
    python 接口自动化测试(五)其他-认证&代理&超时配置
    python 接口自动化测试(四)cookie&session
    接口自动化测试 (三)request.post
    python 接口自动化测试二(request.get)
    python接口自动化测试(c测试环境的准备)
  • 原文地址:https://www.cnblogs.com/immjc/p/9162539.html
Copyright © 2020-2023  润新知