第一反应使用双指针

调整数组顺序使奇数位于偶数前面

http://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593

时间复杂度O(2N),空间复杂度O(N),包含返回数组。

int *reOrderArray( int *array, int arrayLen, int *returnSize ) {
    int *returnAry = NULL, left = 0, right = 0;

    returnSize[0] = 0;
    if( array == NULL || arrayLen < 1 ) {
        return NULL;
    }

    returnAry = (int *)malloc( arrayLen * sizeof(*returnAry) );

    // 统计奇数的数量, 记为 count2.
    // 这样做可以划分出存储偶数和存储奇数的下标范围,
    // [0, count2 - 1]范围存储奇数, [count2, arrayLen - 1]范围存储偶数.
    for( int i = 0; i < arrayLen; ++i ) {
        right += (array[i] & 1) ? 1 : 0;
    }
    for( int i = 0; i < arrayLen; ++i ) {
        returnAry[(array[i] & 1) ? (left++) : (right++)] = array[i];
    }
    returnSize[0] = arrayLen;

    return returnAry;
}
全部评论

相关推荐

嵐jlu:我是山川🐔里🐔🧱的,阿里系简历全过; 你这简历一看就还是半成品啊,没有荣誉经历奖项什么的吗?
投递阿里巴巴集团等公司10个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务