随笔 - 165,  文章 - 0,  评论 - 4,  阅读 - 18023

题目:

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   孜孜不倦fly  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示