知识点:数组
描述
输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
数据范围:0≤n≤5000,数组中每个数的值0≤val≤10000
要求:时间复杂度O(n),空间复杂度O(n)
进阶:时间复杂度O(n2),空间复杂度 O(1)
示例1
输入:[1,2,3,4]
返回值:[1,3,2,4]
示例2
输入:[2,4,6,5,7]
返回值:[5,7,2,4,6]
示例3
输入:[1,3,5,6,7]
返回值:[1,3,5,7,6]
使用标准模板库(STL)和Lambda表达式
该算法使用了标准库的 stable_partition 函数,该函数接受三个参数:要排序的区间首尾迭代器,以及一个谓词函数。谓词函数用于指定排序的规则,这里的谓词函数是一个 lambda 表达式,它返回 x 是否为奇数。
stable_partition 函数的作用是将满足谓词函数的元素按照原有顺序移动到容器的前半部分,不满足谓词函数的元素移动到容器的后半部分,同时保持元素的相对位置不变。由于这里的谓词函数返回 x 是否为奇数,因此该函数会将奇数元素移动到容器的前半部分,偶数元素移动到容器的后半部分。
#include <algorithm>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> reOrderArray(vector<int>& array)
{
// write code here
//[]称为lambda捕获列表;(int x)称为参数列表
stable_partition(array.begin(), array.end(),[](int x) {
return x%2!=0;
});
return array;
}
};