题解 | #调整数组顺序使奇数位于偶数前面(一)#

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

https://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArray(vector<int>& array) {
        // write code here
        if(array.empty())return vector<int>();

        //类似与插入排序
        int l = -1;
        int r = 0;
        while(r < array.size()){
            if(array[r] % 2 == 1){

                int tmp = array[r];
                for(int i = r;i > l + 1;i -= 1){
                    array[i] = array[i - 1];
                }
                l += 1;
                array[l] = tmp;
            }
            r += 1;
        }
        return array;
    }
};

题解二:不使用额外的空间,使用双指针,一个指针负责指明奇数的范围,一个指针负责寻找奇数,在一开始的时候,指向奇数范围的指针必须先是-1,这方便以后的判断,如果负责寻找奇数的指针找到了奇数,首先先将两个指针之间的数据都向右移动一位,然后将原先右指针指向的奇数放入左指针的下一个位置,然后奇数范围扩张。时间复杂度是O(n * n),空间复杂度是O(1)。有点类似于插入排序吧。

class Solution {
vector<int> reOrderArray(vector<int>& array) {
        // write code here
        if(array.empty())return vector<int>();
        //偶数
        vector<int> tmp1;
        //奇数
        vector<int> tmp2;
        for(int i = 0;i < array.size();i++){
            if(array[i] % 2 == 0)tmp1.push_back(array[i]);
            else tmp2.push_back(array[i]);
        }
        if(tmp1.empty())return tmp2;
        if(tmp2.empty())return tmp1;

        for(int i = 0;i < tmp1.size();i += 1){
            tmp2.push_back(tmp1[i]);
        }
        return tmp2;
    }
 

题解一:通过分离出数组的奇数和偶数,然后将偶数数组的元素都压入奇数队列,最后返回奇数队列即可,时间复杂度是O(n),空间复杂度是O(n)。

全部评论

相关推荐

mjasjon:这种trash中厂 简历过筛概率比大厂还低(除阿里系)
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务