题目描述:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

输入:

每个输入文件包含一组测试案例。
对于每个测试案例,第一行输入一个n,代表该数组中数字的个数。
接下来的一行输入n个整数。代表数组中的n个数。

输出:

对应每个测试案例,
输入一行n个数字,代表调整后的数组。注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格。

样例输入:
5
1 2 3 4 5
样例输出:
1 3 5 2 4

对于普通的交换顺序,只要设两个指针分别从头跟尾扫描,当分别遇到不符合条件的位置时停止,然后交换位置,这样只要时间O(n),空间O(1),但是这样做会改变原来的顺序,要保持原来的位置,可以借用一个队列,先将一类数放到正确的位置上,再将队列里的数放到剩下的位置。时间仍为O(n),但是要用额外空间,大小取决于输入。最坏情况下空间为O(n)。

 #include <stack>
#include <cstdio>
#include <iostream>
#include <queue>
using namespace std; int main() {
//freopen("1516.input", "r", stdin);
vector<int> v;
queue<int> q;
int n;
while (scanf("%d", &n) != EOF) {
v.resize(n);
for (int i = ; i < n; ++i) {
scanf("%d", &v[i]);
}
int count = ;
for (int i = ; i < n; ++i) {
if (v[i] % == ) {
v[i - count] = v[i];
} else {
++count;
q.push(v[i]);
}
}
for (int i = n - count; i < n; ++i) {
v[i] = q.front();
q.pop();
}
for (int i = ; i < n; ++i) {
(i == n - ) ? printf("%d\n", v[i]) : printf("%d ", v[i]);
}
}
return ;
} /**************************************************************
Problem: 1516
User: hupo250
Language: C++
Result: Accepted
Time:90 ms
Memory:2048 kb
****************************************************************/

附上通过交换元素不保持相对顺序的代码。

#include <vector>
#include <cstdio>
#include <iostream>
using namespace std; int main() {
//freopen("1516.input", "r", stdin);
int n;
vector<int> v;
while (scanf("%d", &n) != EOF) {
v.resize(n);
for (int i = ; i < n; ++i) {
scanf("%d", &v[i]);
}
int s = , e = n - , t;
while (s < e) {
while (!v[s] & && s < e) ++s;
while (v[s] & && s < e) --e;
t = v[s];
v[s] = v[e];
v[e] = t;
}
for (int i = ; i < n; ++i) {
(i == n - ) ? printf("%d\n", v[i]) : printf("%d ", v[i]);
}
}
return ;
}

[Jobdu] 题目1516:调整数组顺序使奇数位于偶数前面的更多相关文章

  1. [Jobdu] 题目1516 : 调整数组顺序使奇数位于偶数前面

    void diffOddAndEven(int a[], int n) { , high = n - ; int pivot; while (low < high) { == && ...

  2. 剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面

    剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部 ...

  3. 九度OJ 1516 调整数组顺序使奇数位于偶数前面 -- 归并排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的 ...

  4. 剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

    一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345 ...

  5. 剑指Offer面试题:11.调整数组顺序使奇数位于偶数前面

    一 题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 二 解题思路 如果不考虑时间复杂度 ...

  6. 九度oj 题目1516:调整数组顺序使奇数位于偶数前面

    题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3416 解决:1091 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序, ...

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

    题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2 ...

  8. 剑指offer:调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...

  9. C++版 - 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面

    题目: 调整数组顺序使奇数位于偶数前面 热度指数:11843 时间限制:1秒 空间限制:32768K 本题知识点: 数组 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇 ...

  10. 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...

随机推荐

  1. 翻译记忆软件-塔多思TRADO经典教程_5

    TRADOS新手必读 共有篇贴子 TRADOS新手必读   译海撷英系列之软件漫谈之TRADOS新手必读 作者:苏任 我很喜欢到翻译中国网站上来四处看看,一开始主要是关心应用资料和软件,后来就对网友的 ...

  2. PowerDesigner P M F 的意思

    M:表示强制非空:P:是否为主键:D:是否在模型中显示.gerenate:表示是否作为表生成

  3. C#(wpf)迷你词典

    本周利用空余时间做的一个单词查询软件(C#(Wpf)-WebService),目前只支持中英文查词,同义词.例句.发音. 未激活状态 WebService:http://fy.webxml.com.c ...

  4. OSX: SSH密钥使用日记(1)

    大家都知道,一个悠久的历史故事,使用SSH密钥对就可以不用密码登陆远程计算机.经典资料也是不少,不过那些资料对新学者可是有点太不象人话了,不好理解.所以本文试图用更人性一点的语言解释,并演示如何在Ma ...

  5. 重置outlook 2010

    1.进入 D:\program files\mirosoft office\ioffice14 2.outlook /importprf .\.prf 3.账号问题可以-->控制面板--> ...

  6. 〖Linux〗Qt5.2.0+gsoap开发Android的NDK程序遇到错误的解决

    1.  error: cannot convert ‘int*’ to ‘hostent**’ for argument ‘5’ to.. 原因分析: 缺少的宏定义,导致使用了错误的函数原型. 被调用 ...

  7. java Socket Tcp示例三则(服务端处理数据、上传文件)

    示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...

  8. openssl的证书格式转换

    证书转换 PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 ...

  9. 使用任务Task 简化异步编程

    使用任务简化异步编程 Igor Ostrovsky 下载代码示例 异步编程是实现与程序其余部分并发运行的较大开销操作的一组技术. 常出现异步编程的一个领域是有图形化 UI 的程序环境:当开销较大的操作 ...

  10. 原创:【微信小程序】发送消息模板教程(后台以PHP示例)

    1.本教程对外开放,未经博主同意,禁止转载. 2.准备材料:1)公众号|小程序,添加选择的模板消息,2)在设置>开发设置页面,开通消息模板功能:如: 3.因为调用微信发送模板的接口是:https ...