记录一个不一样的sort用法

189 阅读2分钟

今天做力扣的每日一题,是一道对数组进行奇偶划分的题
一个sort简单解决,其实都是非常简单的思路,只是觉得有点意思,就记录下来了
905. 按奇偶排序数组

image.png

每次看到数组不sort一下就很难受,尤其还是有规律的数组
直觉告诉我,用sort应该是可以解出来的
然后就开始魔改sort的cmp函数了

sort内置的cmp函数主要实现的功能:就是在数组中取出两个元素[a,b],通过各种条件判断谁在前,谁在后

  • a前b后,return true
  • a后b前,return false

也就是说sort是一个实现数组元素按某种规律进行先后排序的函数,这种规律是我们能控制的,我们唯一不能控制的就是它内部挑选元素的机制

回到这个题
sort要比较的两个数有四种可能

  1. a奇b偶 a后b前
  2. a偶b奇 a前b后
  3. a奇b奇 无所谓先后
  4. 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;
    }
};

效率很高 image.png