leetcode - 按奇偶排序数组

题目地址

题目描述

给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。

你可以返回满足此条件的任何数组作为答案。

示例:

输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。

提示:

1 <= A.length <= 5000
0 <= A[i] <= 5000

本题主要解决方案有如下两种:

1、多数组
声明奇数数组和偶数数组,一次遍历将数组拆分为奇数数组和偶数数组,最后合并数组进行返回。

    vector<int> sortArrayByParity(vector<int>& nums) {
        vector<int> result;
        vector<int> odd;   // 奇数数组
        vector<int> even; // 偶数数组
        for (int i = 0;i < nums.size();i++) {
            if (nums[i] % 2 == 0) {
                even.push_back(nums[i]);
            } else {
                odd.push_back(nums[i]);
            }
        }
        result.insert(result.end(), even.begin(), even.end());
        result.insert(result.end(), odd.begin(), odd.end());
        return result;
    }

2、双指针法
可以理解为数组左边为偶数,右边为奇数。通过左指针进行遍历碰到单数暂停,右指针进行遍历碰到偶数暂停。直到左右指针相遇。

    vector<int> sortArrayByParity(vector<int>& nums) {
        int l = 0, r = nums.size() - 1;
        while (l < r) {
            // 左指针指向偶数时向右‘前进’
            while (l < nums.size() && nums[l] % 2 == 0) {
                l++;
            }
            // 右指针指向奇数时向左‘前进’
            while (r >= 0 && nums[r] % 2 == 1) {
                r--;
            }
            if (l < r) {
                // 交换
                swap(nums[l], nums[r]);
            }
        }
        return nums;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容