[jobdu]调整数组顺序使奇数位于偶数前面
这道题的代码没啥好说的,用了O(n)的空间就是水题了。但可以讲一下思考过程。
一开始是想O(1)的空间的,然后想从左往右双指针扫,然后根据出现顺序交换遇到的偶数和奇数。但遇到一个问题:
1, 2, 3, 4, 5; 第一次交换完是 1, 3, 2, 4, 5;但再往右扫就会再次碰到2这个偶数,又会和5交换,成为1, 3, 5, 4, 2, 错误!
试了一下别的交换方法,也不行。想了想,觉得当出现这种奇数偶数交替出现的情况,单靠这样交换是不行的,因为第一个偶数要出现在所有奇数完了之后的位置。
想了另一个角度,一个指针在最左,一个指针在最右。然后两边往中间扫,但这道题又要保持原序,又不行。
最后看了别人的做法,是O(n)的空间开个数组,那就没啥特别了。。。
HHT的这道题本来是不需要保持原序的,九度这就经常变一下,也不知道好还是坏。
另外一个经验是方法想出来后,先拿小数组test一下,否则错的方法写完代码再改太费时间了。
代码里唯一有点意思的是使用了a&1 == 0来判断奇偶性。
但其实在O(1)的空间限制下,有个n*logn的解法(分治法),有空写一下:http://qing.blog.sina.com.cn/1570303725/5d98eeed33000hcb.html
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int n;
        int[] a;
        while (cin.hasNextInt()) {
            n = cin.nextInt();
            a = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = cin.nextInt();
            }
            partition(a, n);
            for (int i = 0; i < n-1; i++)
            {
                System.out.print(a[i]+" ");
            }
            System.out.println(a[n-1]);
        }
    }
    public static void partition(int a[], int n) {
        int[] b = new int[n];
        int k = 0;
        for (int i = 0; i < n; i++)
        {
            if ((a[i] & 1) != 0)
            {
                b[k] = a[i];
                k++;
            }
        }
        for (int i = 0; i < n; i++)
        {
            if ((a[i] & 1) == 0)
            {
                b[k] = a[i];
                k++;
            }
        }
        for (int i = 0; i < n; i++)
        {
            a[i] = b[i];
        }
    }
}
[jobdu]调整数组顺序使奇数位于偶数前面的更多相关文章
- 【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面
		
题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2 ...
 - 剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面
		
一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345 ...
 - 剑指offer:调整数组顺序使奇数位于偶数前面
		
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...
 - C++版 - 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面
		
题目: 调整数组顺序使奇数位于偶数前面 热度指数:11843 时间限制:1秒 空间限制:32768K 本题知识点: 数组 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇 ...
 - 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面
		
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...
 - 《剑指offer》第二十一题(调整数组顺序使奇数位于偶数前面)
		
// 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #inclu ...
 - 《剑指offer》— JavaScript(13)调整数组顺序使奇数位于偶数前面
		
调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的 ...
 - 剑指Offer面试题:11.调整数组顺序使奇数位于偶数前面
		
一 题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 二 解题思路 如果不考虑时间复杂度 ...
 - 剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面
		
剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部 ...
 
随机推荐
- hadoop错误FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOException There appears to be a gap in the edit log
			
错误: FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOExcep ...
 - 节点类(CCNode)
			
节点与渲染树 回顾前面的介绍,我们已经知道了精灵.层和场景如何构成一个游戏的框架.精灵属于层,层属于场景,玩家与精灵互动,并导致游戏画面在不同场景中切换.把每个环节拼接在一起,我们得到了一个完整的关系 ...
 - AndroidStudio怎么将开源项目发布到jcenter
			
前言 自己在网上搜了一大堆,大体就两种方法,而我选择的是其中代码少的的方法,不过他们或多或少留下了少许的坑,(按他们的方法我是上传成功,但不能发布到jCenter上去,也可能是我自己的问题o(≧v≦) ...
 - CentOS 6.7安装Hadoop 2.6.3集群环境
			
在CentOS 6.7 x64上搭建Hadoop 2.6.3完全分布式环境,并在DigitalOcean上测试成功. 本文假设: 主节点(NameNode)域名(主机名):m.fredlab.org ...
 - centos 6.3 编译安装 nginx +mysql + php
			
这篇文章是对另一篇文章的整理,作为记录收藏 1,配置防火墙,开启80端口.3306端口 配置iptables,开启80端口.3306端口 vi /etc/sysconfig/iptables -A I ...
 - 微信上传图文消息invalid media_id hint,thumb_media_id怎么获取
			
微信上传图文消息thumb_media_id, thumb_media_id怎么获取, 微信群发图文消息invalid media_id hint, 微信群发图文消息40007, 40007,inva ...
 - Jquery Call WebDav
			
最近研究了一下WebDav,尝试了一下用Jquery.ajax 发生请求访问WebDav. 代码如下: <!DOCTYPE html> <html xmlns="http: ...
 - [Mime] MimeEntity--MimeEntity Mime实体帮助类 (转载)
			
点击下载 MimeEntity.rar 这个类是关于Mime实体的类看下面代码吧 /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 /// 联系方式 ...
 - jquery ajax跨域取数据
			
jsonp.js/html 主要是利用jquery ajax和jsonp的datatype 跨站点请求数据,记录~ 同源策略:同端口,同协议,同域:所以ajax不能支持跨域取得数据,解决方案一般是js ...
 - power shell upload file to azure storage
			
# Azure subscription-specific variables. $storageAccountName = "storage-account-name" $con ...