剑指offer——调整数组顺序使奇数位于偶数前面(快排变形)

目录

题目:

常规做法:使用较多额外空间,不足以拿offer

双指针法:借鉴快排思想,不使用额外空间,完美


题目:

常规做法:使用较多额外空间,不足以拿offer

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        //常规思路,需要占用较多额外空间
        vector<int> v,odd,even;
        for(int i=0;i<nums.size();i++){
            if(nums[i]%2==1)
                odd.push_back(nums[i]);
            else
                even.push_back(nums[i]);
        }
        for(int i=0;i<odd.size();i++)
            v.push_back(odd[i]);
       for(int i=0;i<even.size();i++)
            v.push_back(even[i]);
        
        return v;
    }
};

双指针法:借鉴快排思想,不使用额外空间,完美

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        //双指针,借鉴快排里的思想
        int left = 0;
        int right = nums.size()-1;
        while(left<right){
            while(left<right&&nums[left]%2==1)
                left++;
            while(left<right&&nums[right]%2==0)
                right--;
            swap(nums[left],nums[right]);
        }
        return nums;
    }
};

 

发布了370 篇原创文章 · 获赞 340 · 访问量 16万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 鲸 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览