这道题的代码没啥好说的,用了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];}}
}

  

转载于:https://www.cnblogs.com/lautsie/p/3348665.html

[jobdu]调整数组顺序使奇数位于偶数前面相关推荐

  1. 剑指offer:面试题21. 调整数组顺序使奇数位于偶数前面

    题目:调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入:nums = [1,2,3,4 ...

  2. java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面

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

  3. 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java

    <LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...

  4. 面试 6:调整数组顺序使奇数位于偶数前面

    今天给大家带来的是 <剑指 Offer>习题:调整数组顺序使奇数位于偶数前面,纯 Java 实现希望大家多加思考. 面试题:输入一个整型数组,实现一个函数来调整该数组中的数字的顺序,使得所 ...

  5. 【剑指offer-Java版】14调整数组顺序使奇数位于偶数前面

    调整数组顺序使奇数位于偶数前面:遍历交换 特殊输入: 1) 只有一个数字 2) 全奇数或者全偶数 3) 空指针 4) 正常输入 考虑到扩展性,C++里面使用了函数指针来实现,但是对于java,可以采用 ...

  6. 【编程题目】调整数组顺序使奇数位于偶数前面

    54.调整数组顺序使奇数位于偶数前面(数组). 题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分, 所有偶数位于数组的后半部分.要求时间复杂度为 O(n). 小题,秒灭. ...

  7. LeetCode-剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 思路一:使用快慢双指针 1: i找偶数找到了,继续往下执行,找不到i++ 2:j找奇数,找到了继续往下执行,找不到j– 3:最后交换 clas ...

  8. python调整数组顺序使奇数位于偶数前面

    |调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分. 示例: 输入:nums = [1,2,3,4] 输出 ...

  9. 剑指Offer #13 调整数组顺序使奇数位于偶数前面 | 图文详解

    题目来源:牛客网-剑指Offer专题 题目地址:调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的 ...

最新文章

  1. 每日记载内容总结50
  2. 随机梯度下降分类器(SGDClassifier)
  3. NodeJS基础2---2 Promise详解
  4. 算法----------加一
  5. Did you forget add @script or @script_method annotation? If this is a nn.ModuleList, add it to __con
  6. 视觉SLAM学习--图像匹配(CVPR2020 Tutorial)
  7. python链接mysql报错2003_Python连接Mysql报错问题解决
  8. 作为一名通信老司机,我是如何看待翼龙通信无人机救灾的?
  9. r mysql utf8_R读取MySQL数据出现乱码,解决该问题的方法总结
  10. 终极解决办法rvct Cannot obtain license for Compiler (feature compiler) with license version = 3.1...
  11. oracle隐含参数 开库,Oracle数据库隐含参数介绍
  12. java keytool 生成p12证书
  13. C# 屏幕保护程序制作
  14. MySQL学习笔记(12)—— SQL触发器:
  15. 在Windows 10中截取截图的6种方式 简介
  16. 秣小白的C语言旅程——第二站(含自我介绍)
  17. iPad /iPhone无法开机、白苹果怎么办?教你快速解决iPad /iPhone开不了机的难题
  18. 由高斯投影坐标反算成经纬度
  19. 化妆品不合肤质惹来老年斑
  20. 2022-2027年中国激光雷达行业市场调研及未来发展趋势预测报告

热门文章

  1. ASP.NET MVC Framework体验(1):从一个简单实例开始
  2. 四字节对齐(DWORD-aligned)
  3. C6678-SRIO和FPGA的通信
  4. 飞桨模型保存_重磅发布开源框架、生物计算平台螺旋桨,百度飞桨交了年终成绩单...
  5. 难点电路详解之负反馈放大器电路(3)
  6. 最应该看的一本人工智能理论的书-神经网络于深度学习-目录
  7. Beta--冲刺阶段合集
  8. 强大的Vivado IP工具——自定义IP的使用
  9. 人本质要好,要善良,要真诚,有格局和胸怀,有能力,有眼光,能讲故事,能找到人,能搞到钱...
  10. springmvc整合mybatis框架源码 bootstrap html5 mysql oracle maven SSM