zoukankan      html  css  js  c++  java
  • 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    题意

    将数组中的所有奇数移动到偶数前面

    思路

    • 可以借鉴快排的思想,快排每一次划分都会确定一个元素的最终位置。在快排中,我们是每次把比「枢轴」小的放左边,比「枢轴」大的放右边,类比于这个,我们可以把相对于「枢轴」来说是奇数的移动到左边,相对于「枢轴」来说是偶数的放右边。一次划分过后就完成了调换的过程。代码也是在快排的模板上改的。

    代码

    class Solution {
    public:
        void partition(vector<int>& nums, int l, int r) {
            int tmp = nums[l];
            while(l < r) {
    						//相对于快排做的改动的是&&之后的判断
                while(l < r && (nums[r] & 1) == 0)     r--;
                nums[l] = nums[r];
                while(l < r && (nums[l] & 1) == 1)     l++;
                nums[r] = nums[l];
            }
            nums[l] = tmp;
        }
    
        vector<int> exchange(vector<int>& nums) {
            if(nums.size() == 0) {
                return {};
            }
            partition(nums, 0, nums.size() - 1);
            return nums;
        }
    };
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    js38---门面模式
    js37---Function.prototype
    js36---函数嵌套
    js35
    js34
    js33--责任链模式
    js32---CommonUtil.js
    龙芯服务器参数
    SQLSERVER 秘钥整理
    IOMETER的简单使用
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14314375.html
Copyright © 2011-2022 走看看