题目:

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        for(int i=0,j=nums.size()-1;i<j;i++){      
            if(nums[i]%2==0){                    //从i前开始,遇到偶数开始处理
                while(nums[j]%2==0&&i<j){        //尾部的数字如果是偶数则j前移直到遇到奇数。要注意有可能都没有奇数,所以要加上&&i<j
                    j--;
                }
                if(nums[j]%2==1){                //尾部找到的奇数与前头的偶数做交换
                    swap(nums[i],nums[j]);
                    j--;
                }
            }
        }
        return nums;
    }
};

保证奇数和奇数,偶数和偶数之间的相对位置不变:

//使用STL和lambda
//stable_partition(b,e,p):稳定分区,相对顺序不变。
//实例1:
//输入一个字符串(仅包含大小写),把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
//stable_partition(s.begin(),s.end(),isLower); 
vector<int> reOrderArray(vector<int>& array) {
       stable_partition(array.begin(), array.end(), [](int x){
            return x%2 ==1;
       }) ;
        return array;
    }
};
posted on 2023-07-26 20:20  孜孜不倦fly  阅读(7)  评论(0)    收藏  举报