题目描述:

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

输入:

每个输入文件包含一组测试案例。
对于每个测试案例,第一行输入一个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. Spring 在XML中声明切面/AOP

    在Spring的AOP配置命名空间中,我们能够找到声明式切面选择.看以下: <aop:config> <!-- AOP定义開始 --> <aop:pointcut/> ...

  2. 【Nodejs】理想论坛帖子爬虫1.01

    用Nodejs把Python实现过的理想论坛爬虫又实现了一遍,但是怎么判断所有回调函数都结束没有好办法,目前的spiderCount==spiderFinished判断法在多页情况下还是会提前中止. ...

  3. 将War发布到Tomcat7上遇到的问题及其解决

    用MyEclipse做了一个app,在其自带的Tomcat里运行正常,做成war后却出现如下错误: [ServletException in:/page/jsp/template/block.jsp] ...

  4. W3CSchool CSS学习简记

    什么是 CSS?   CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内 ...

  5. JBOSS启动报错解决方案

    同一个jboss下不可以放不同的项目包,否则报错: 注意:如果后期使用,注意删除上图的本地文件,重新加载即可.

  6. sso单点登录系统原理与实现

    sso单点登录 1.认识并理解sso及其应用,并能根据其实现原理自行实现sso 没有使用sso单点登录的系统用户再访问同一个系统的不同模块都必须的登录 使用sso单点登录,用户只需要登录一次,并且可以 ...

  7. 使用fiddler来抓包

    使用fiddler来抓包 Sniffer,wireshark,WinNetCap.WinSock Expert,SpyNet 都是当前流行的抓包工具 需要先做一些简单的准备工作: 一台带有无线网卡的P ...

  8. java中的Checked Exception和Unchecked Exception的区别

    Java 定义了两种异常: - Checked exception: 继承自 Exception 类是 checked exception.代码需要处理 API 抛出的 checked excepti ...

  9. Move semantics(C++11)

    /*  * Compile with:   *       g++ move_test.c -o move_test -std=c++11 -g -fno-elide-constructors  * ...

  10. 为Github 托管项目的访问添加SSH keys

    为了便于访问远程仓库,各个协作者将自己的本地的项目内容推送到远程仓库中,使用 SSH keys 验证github的好处:不用每次提交代码时都输入用户名和密码. 如果SSH key没有添加到github ...