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

来源:互联网 发布:大数据 包嗅探器 编辑:程序博客网 时间:2024/06/13 09:59

题目描述

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

解题思路

本题可以采用2.5次遍历的方法来解决。为什么说是2.5次呢?看了下面就知道了。


第一次遍历,找出数组中所有偶数,按照相对次序存到另外一个新建的数组中。


第二次遍历,把数组中所有奇数都存到数组的前半部分。此时可以不用管偶数,因为偶数已经在第一次遍历时存好了。


第二点五次遍历,遍历存偶数的数组,将其中的元素依次添加到原数组的后半部分。因为这次只需要遍历存偶数的数组,所以称之为半次遍历。


代码

/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    vector<vector<int> > FindPath(TreeNode* root,int expectNumber)     {        if (!root)            return list;                dfsFind(root, expectNumber); //深度优先搜索                return list;    }    private:    vector<vector<int> > list;    vector<int> tmp;        void dfsFind(TreeNode* root, int number)    {        tmp.push_back(root->val); //存根节点的值                if (!root->left && !root->right && root->val == number) //为叶节点,并且值为number            list.push_back(tmp); //存入数组        else        {            if (root->left)                dfsFind(root->left, number - root->val); //搜索左子树                        if (root->right)                dfsFind(root->right, number - root->val); //搜索右子树        } //不满足值的要求的叶节点什么也不做                tmp.pop_back(); //删除最后一个元素,回到上一层递归    }};