第一反应使用双指针

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

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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 11:15
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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