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

地址 https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4] 
注:[3,1,2,4] 也是正确的答案之一。
 
提示:
1 <= nums.length <= 50000
1 <= nums[i] <= 10000

 

解法

使用双指针 找到第一个偶数  逆序找到最后一个奇数,然后交换。直到指针相交

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

 

posted on 2021-01-13 22:48  itdef  阅读(92)  评论(0编辑  收藏  举报

导航