【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面

来源:互联网 发布:饥荒mac中文版 编辑:程序博客网 时间:2024/06/05 13:23

题目链接地址:
http://ac.jobdu.com/problem.php?pid=1516

题目1516:调整数组顺序使奇数位于偶数前面

时间限制:1 秒内存限制:128 兆特殊判题:否提交:2858解决:924
题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
输入:
每个输入文件包含一组测试案例。
对于每个测试案例,第一行输入一个n,代表该数组中数字的个数。
接下来的一行输入n个整数。代表数组中的n个数。
输出:
对应每个测试案例,
输入一行n个数字,代表调整后的数组。注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格。
样例输入:
5
1 2 3 4 5
样例输出:
1 3 5 2 4


思路分析:

剑指offer书上的问题比较简单,没有要求顺序不能变。方法(O(n)复杂度):

设定两个指向数组的指针,一个初始化数组第一个元素一个初始化最后一个元素,头指针向后扫描偶数。如果发现偶数,则让尾指针向前扫描,找出一个奇数,然后两者交换。然后继续头指针向后扫描,直到尾指针在头指针的前面,结束。

但交换过程中把奇数之间、偶数之间的顺序给打乱了,不符合本题目的要求。
而九度题目进行了改进:
要求调整顺序,使得所有奇数在前面,所有偶数在后面,而且奇数之间的顺序不能变,偶数之间顺序不能变。即“调整顺序”和“相对位置不变”。
方法:
  

  1. 一个数组扫描两次,先后记录奇数和偶数,再将数组先后写回原数组,时间和空间复杂度均为O(n)。
  2. 构建两个数组,记录奇数和偶数。再将数组写回原数组,时间和空间复杂度均为O(n)。
  3. 构建两个单链表,一个存放奇数,一个存放偶数;再将奇偶数写回原数组,时间和空间复杂度均为O(n)。

代码:

/********************************* 【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面Author:牧之丶  Date:2015年Email:bzhou84@163.com **********************************/ #include<stdio.h>#include<stdlib.h>  #include<string>#include <math.h>#include<stack>#include <vector>#include <iostream>using namespace std;int main(){    vector<int> odd, even;    int n, i, num;    while(scanf("%d", &n)!= EOF){        odd.clear();        even.clear();        for(i = 0; i < n; ++i){            scanf("%d", &num);            num & 1 ? odd.push_back(num) : even.push_back(num);        }        for(i = 0; i < even.size(); ++i){            odd.push_back(even[i]);        }        printf("%d", odd[0]);        for(i = 1; i < odd.size(); ++i){            printf(" %d", odd[i]);        }        printf("\n");    }    return 0;}/**************************************************************    Problem: 1516    Language: C++    Result: Accepted    Time:80 ms    Memory:2552 kb****************************************************************/

总结:

  • 善用两个指针
  • 善于开辟数组辅助
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东价格保护后发票怎么办 淘宝未满十八岁怎么办 SVN提交时代码冲突怎么办 京东自营没货了怎么办 京东下了单 没货怎么办 万达广场购物卡怎么办 京东白条没额度怎么办 京东退款还收到货怎么办 退货不想要货了怎么办 安装微擎创建数据库失败怎么办 tp文件损坏或丢失怎么办 手机QQ启动有问题应该怎么办 微信网页版页面巨大怎么办 魔兽军团烹饪食谱扔了怎么办 赴港旅游网上签证怎么办了? 美团商家入住没有营业执照怎么办 团购房子不想要怎么办 乐视液晶屏坏了怎么办 wifi盒子插上网线然后怎么办 在泰国手机坏了怎么办 朋友在泰国手机关机怎么办 qq上转账转错了怎么办 扣扣转账转错了怎么办 到付快递签收了怎么办 京东白条消费了怎么办 确认收货点错了怎么办 小米6后盖缝隙大怎么办 苹果6splus电池不耐用怎么办 苹果一朵云加箭头下载不了怎么办 苹果8p信号不好怎么办 苹果8p像素不好怎么办 美版iphonex有锁怎么办 苹果8x突然黑屏怎么办 苹果6s无法激活怎么办 苹果6sp激活出错怎么办 小米4c触屏失灵怎么办 手机谷歌浏览器为什么打不开怎么办 谷歌浏览器打不开网址怎么办 拼多多被限制了怎么办 保时捷11年的前机盖打不开怎么办 唯品会衣服质量有问题怎么办