• 【21天学习挑战赛—经典算法】LeetCode 922. 按奇偶排序数组 II


    题目

    给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。

    对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。

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

    详见:922. 按奇偶排序数组 II

    思路

    1. 交换奇偶数,牺牲内存,双指针交换偶数位上的奇数和奇数位上的偶数
    2. 遍历,动态一个新数组,遍历A,把偶数放在新数组的偶数位,奇数放在奇数位

    方法三:两次遍历
    遍历一遍数组把所有的偶数放进ans[0],ans[2],ans[4],以此类推。
    再遍历一遍数组把所有的奇数依次放进 ans[1],ans[3],ans[5],以此类推。

    方法四:双指针 如果原数组可以修改,则可以使用就地算法求解。 为数组的偶数下标部分和奇数下标部分分别维护指针 i,j。随后,在每一步中,如果
    nums[i] 为奇数,则不断地向前移动 j(每次移动两个单位),直到遇见下一个偶数。此时,可以直接将nums[i] 与 nums[j]
    交换。我们不断进行这样的过程,最终能够将所有的整数放在正确的位置上。

    来源:力扣(LeetCode)

    代码

    方法一:交换奇偶数

    /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* sortArrayByParityII(int* A, int ASize, int* returnSize){
            *returnSize = ASize;
            int* returnArray = (int*)malloc(sizeof(int) * ASize);
            int tmp;
            for(int i = 0; i < ASize; i = i + 2){
                for(int j = 1; j< ASize; j = j + 2){
                    if( A[i]%2!=0 && A[j]%2==0 ){
                        tmp = A[i];
                        A[i] = A[j];
                        A[j] = tmp;
                        break;
                    }
                }
            }
            
            return A;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    方法二:遍历

    /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* sortArrayByParityII(int* A, int ASize, int* returnSize){
        *returnSize = ASize;
        int* returnArray = (int*) malloc(sizeof(int) * ASize);
        for (int i = 0, j = 1, k = 0;  k < ASize; k++) {
            // 遍历偶数
            if (A[k] % 2 == 0) {
                returnArray[i] = A[k];
                i = i + 2;
            }
            // 遍历奇数
            else {
                returnArray[j] = A[k];
                j = j + 2;
            }
        }
        return returnArray;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    大数据知识合集之数据分析模型
    dbeaver连接国产数据库
    Windows安装cygwin + swoole,并配置crontab定时任务
    数据仓库架构之详解Kappa和Lambda
    神经网络之防止过拟合
    【Springboot 入门培训】#14 WebJars 样式包BootStrap 5架构
    互联网金融基础知识--数字货币
    【GIT版本控制】--常见问题与解决方案
    NewStarCTF 2023 公开赛道 WEEK2|Crypto
    SAS学习4(常用过程步sort、format、print、连接数据库、sql过程)
  • 原文地址:https://blog.csdn.net/qq_46207024/article/details/126412521