0
点赞
收藏
分享

微信扫一扫

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

zmhc 2022-01-21 阅读 81

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 - 力扣(LeetCode) (leetcode-cn.com)

目录

方案1:快速排序的手段

代码

复杂度

运行结果

方案2 :开辟新数组

代码

复杂度

运行结果

方案3:从两边,向中间

代码

复杂度

运行结果 


方案1:快速排序的手段

代码

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        int i = -1, j = -1, N = nums.size();
        while (++j != N) if (nums[j] % 2) swap(nums[++i], nums[j]);
        return nums;
    }
};

复杂度

时间复杂度O(n),空间复杂度O(1).

运行结果

方案2 :开辟新数组

代码

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        int N = nums.size();
        vector<int> ans(N);
        for(int i = 0, iter = 0, riter = N - 1; i != N; ++i){
            nums[i] % 2 ? ans[iter++] = nums[i] : ans[riter--] = nums[i];
        }
        return ans;
    }
};

复杂度

时间复杂度O(n),空间复杂度O(n).

运行结果

方案3:从两边,向中间

设置两个迭代器,一个正向,一个反向。当正向迭代器遇到偶数,反向迭代器遇到奇数,就交换它们位置的值。

代码

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        int iter = 0, riter = nums.size() - 1;
        while (iter < riter) {
            if (nums[iter] % 2) ++iter;
            else if (!(nums[riter] % 2)) --riter;
            else swap(nums[iter++], nums[riter--]);
        }
        return nums;
    }
};

复杂度

时间复杂度O(n),空间复杂度O(1).

运行结果 

举报

相关推荐

0 条评论