这道题的代码没啥好说的,用了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]调整数组顺序使奇数位于偶数前面的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 《剑指offer》第二十一题(调整数组顺序使奇数位于偶数前面)

    // 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #inclu ...

  7. 《剑指offer》— JavaScript(13)调整数组顺序使奇数位于偶数前面

    调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的 ...

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

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

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

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

随机推荐

  1. apache kafka源码分析-Producer分析---转载

    原文地址:http://www.aboutyun.com/thread-9938-1-1.html 问题导读1.Kafka提供了Producer类作为java producer的api,此类有几种发送 ...

  2. WPF组件开发之组件的基类

    之前在网上看到很多关于组件开发的资料,但真正可以用到框架内的却很少.今天贴出自己做的组件,并适合大部分框架的代码. 组件开发需要先做出组件的基类,然后由其他的各类组件去继承这个基类,下面是组件基类的代 ...

  3. 怎样通过ajax提交数据

    ajax的出现彻底改变了javascript命运,通过ajax可以直接向服务器提交数据,有两种方式: get方式,数据直接拼接在地址中 post方式,数据由data字段携带 post方式,data中是 ...

  4. Android(java)学习笔记169:Activity中的onCreate()方法分析

    1.onCreate( )方法是android应用程序中最常见的方法之一: 翻译过来就是说,onCreate()函数是在activity初始化的时候调用的,通常情况下,我们需要在onCreate()中 ...

  5. Linux删除文件Argument list too long问题的解决方案

    方法一:使用find find . -name 文件 | xargs rm -f 但文件数量过多,find命令也会出现问题: -bash: /bin/find: Argument list too l ...

  6. DNS服务器安装配置案例详解

    案例配置要求:假设有一个域名:tianyik.com主机为:192.168.31.36    mail 192.168.31.37    www  192.168.31.38    pop --> ...

  7. 【jQuery】用jQuery给文本框添加只读属性【readOnly】

    <input id="id" type="text" /> jQuery( $("#ID").attr({ readonly: ...

  8. Http请求通信(工具类)

    Http请求通信(工具类) 异步消息处理流程是: 首先需要在主线程当中创建一个Handle对象,并重写handlerMessage()方法. 然后当子线程中需要进行UI操作时,就创建一个Message ...

  9. 给右键 添加dos命令

    reg add "HKEY_CURRENT_USER\Console" /v "ScreenBufferSize" /t REG_DWORD /d 655361 ...

  10. JavaScript学习总结【8】、面向对象编程

    1.什么是面向对象编程 要理解面向对象,得先搞清楚什么是对象,首先需要明确一点这里所说的对象,不是生活中的搞男女朋友对象,面向对象就是面向着对象,换在代码中,就是一段代码相中了另一段代码,自此夜以继日 ...