今天做力扣的每日一题,是一道对数组进行奇偶划分的题
一个sort简单解决,其实都是非常简单的思路,只是觉得有点意思,就记录下来了
905. 按奇偶排序数组
每次看到数组不sort一下就很难受,尤其还是有规律的数组
直觉告诉我,用sort应该是可以解出来的
然后就开始魔改sort的cmp函数了
sort内置的cmp函数主要实现的功能:就是在数组中取出两个元素[a,b],通过各种条件判断谁在前,谁在后
- a前b后,return true
- a后b前,return false
也就是说sort是一个实现数组元素按某种规律进行先后排序的函数,这种规律是我们能控制的,我们唯一不能控制的就是它内部挑选元素的机制
回到这个题
sort要比较的两个数有四种可能
- a奇b偶 a后b前
- a偶b奇 a前b后
- a奇b奇 无所谓先后
- a偶b偶 无所谓先后
3、4情况都是无所谓的,返回什么都可以,所以先不用管
1情况要return false
2情况要return true
这样我们就能轻松加愉快的写出代码了
AC代码(代码里加了正常排序的条件,没什么用,写着玩的)
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
//a偶,b奇 a前b后 return true
//a奇,b偶 a后b前 return false
//a偶,b偶 a,b都要在前面,无所谓先后 正常排序
//a奇,b奇 a,b都要在后面,无所谓先后 正常排序
sort(nums.begin(),nums.end(),[&](const int a,const int b){
if(a%2==b%2) return a<b;
else return a%2==0 && b%2==1;
});
return nums;
}
};
效率很高