20250204力扣每日一题

知识点

  • &按位与操作符可以用来判断奇偶,一个整型数字&1
    • 如果结果是1,那么说明这个数字是奇数
    • 如果结果是0,那么说明这个数字是偶数

解题思路

我的做法

  • 将整个nums数组遍历一遍,找出所有的奇数元素和偶数元素,并将它们分别输入进新开的奇数数组和偶数数组
  • 轮流将奇数数组和偶数数组输入到ans数组中,并返回ans数组

双指针做法

  • 分别初始化两个指针ij指向奇数和偶数,遍历原数组。
  • 如果遍历到了不符合位置的奇数,就开始遍历寻找不符合位置的偶数,并将其交换位置

实现代码

我的做法

class Solution {
public:
    vector<int> sortArrayByParityII(vector<int>& nums) {
        vector<int> a, b;
        for(auto num: nums){
            if(num & 1){
                // 奇数
                a.push_back(num);
            }else{
                // 偶数
                b.push_back(num);
            }
        }

        int n = nums.size() / 2;
        vector<int> ans;

        for(int i = 0; i < n; i ++){
            ans.push_back(b[i]);
            ans.push_back(a[i]);
        }

        return ans;

    }
};

双指针做法

class Solution {
public:
    vector<int> sortArrayByParityII(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0,j = 1; i < n; i += 2){
            if(nums[i] & 1){
                while(nums[j] & 1){
                    j += 2;
                }

                swap(nums[i], nums[j]);
            }
        }

        return nums;
    }
};



Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
  • Displaying External Posts on Your al-folio Blog
  • 强化学习导论
  • 企业项目实训
  • 面试总结