0
点赞
收藏
分享

微信扫一扫

Leetcode题库905. 按奇偶排序数组(c实现)

书坊尚 2022-04-29 阅读 50
算法

文章目录

思路

方法1:一次遍历,遇偶存头,遇奇存尾

建立一个与nums数组相同长度的数组ret
遍历nums
遇到偶数则将其存于头部
遇到奇数则将其存于尾部
时间复杂度:O(n)
空间复杂度:O(n)

方法2:一次遍历,双指针交换

左指针指向nums中从左至右第一个奇数
右指针指向nums中从左至右第一个偶数
交换左右指针中的数值
经过上述操作,
左指针处的数值以及左指针之前的数值都是偶数
右指针处的数值以及右指针之后的数值都是奇数
左指针从自身位置向右继续寻找奇数
若找到奇数,则下一步就是找到一个偶数与之交换,这时右指针从自身位置向左寻找,若找到则交换,若遇到右指针等于左指针的情况说明当前nums已排好序
时间复杂度:O(n)
空间复杂度:O(1)

要点:
保证左指针之前的数值都是偶数
保证右指针之后的数值都是奇数
使得它们相遇时,左全为偶数,右全为奇数

方法1代码

int* sortArrayByParity(int* nums, int numsSize, int* returnSize){
    *returnSize=numsSize;
    int *ret=(int*)malloc(sizeof(int)*numsSize);
    int left=-1,right=numsSize;
    for(int i=0;i<numsSize;i++){
        if(nums[i]%2==0){           //num[i]为偶数
            ret[++left]=nums[i];
        }
        else{                       //num[i]为奇数
            ret[--right]=nums[i];
        }
    }

    return ret;
}
举报

相关推荐

0 条评论