题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序。使得全部奇数位于数组的前半部分。全部偶数位予数组的后半部分。

这个题目要求把奇数放在数组的前半部分, 偶数放在数组的后半部分,因此全部的奇数应该位于偶数的前面。也就是说我们在扫描这个数组的时候, 假设发现有偶数出如今奇数的前面。我们能够交换它们的顺序,交换之后就符合要求了。

因此我们能够维护两个指针,第一个指针初始化时指向数组的第一个数字,它仅仅向后移动:第二个指针初始化时指向数组的最后一个数字, 它仅仅向前移动。

在两个指针相遇之前,第一个指针总是位于第二个指针的前面。假设第一个指针指向的数字是偶数,而且第二个指针指向的数字是奇数,我们就交换这两个数字。

代码实现:

public class Test14 {

    /**
* 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
* 使得全部奇数位于数组的前半部分,全部偶数位予数组的后半部分。 *
* @param arr 输入的数组
*/
public static void reorderOddEven(int[] arr) {
// 对于输入的数组为空,或者长度小于2的仅仅接返回
if (arr == null || arr.length < 2) {
return;
} // 从左向右记录偶数的位置
int start = 0;
// 从右向左记录奇数的位置
int end = arr.length - 1;
// 開始调整奇数和偶数的位置
while (start < end) {
// 找偶数
while (start < end && arr[start] % 2 != 0) {
start++;
}
// 找奇数
while (start < end && arr[end] % 2 == 0) {
end--;
} // 找到后就将奇数和偶数交换位置
// 对于start=end的情况,交换不会产生什么影响
// 所以将if推断省去了
int tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
}
} /**
* 输出数组的信息
*
* @param arr 待输出数组
*/
public static void printArray(int[] arr) {
if (arr != null && arr.length > 0) {
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
}
} public static void main(String[] args) {
int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
reorderOddEven(array);
printArray(array);
}
}

执行结果:

【剑指Offer学习】【面试题14 :调整数组顺序使奇数位于偶数前面】的更多相关文章

  1. 《剑指offer》面试题14 调整数组顺序使奇数位于偶数前面 Java版

    (输入整数数组,使所有奇数位于前半部分,所有偶数位于后半部分.) 我的方法:想到用两个下标分别表示奇数和偶数的界线,一个在开头,一个在末尾,判断每一个数字的类别,然后将它放入对应的范围内,移动下标,直 ...

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

    面试题 21. 调整数组顺序使奇数位于偶数前面

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

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

  4. 剑指offer 13.代码的完整性 调整数组顺序使奇数位于偶数前面

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.   本渣渣解题思路: ...

  5. 剑指Offer(书):调整数组顺序使奇数位于偶数前面

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

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

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

  7. 剑指offer-数值的整数次方-调整数组顺序使奇数位于偶数前面-代码的完整性-python

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   保证base和exponent不同时为0   思路 求base的expon ...

  8. 剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前

    题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初 ...

  9. 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)

    问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这 ...

  10. 剑指offer-面试题14.调整数组顺序使奇数位于偶数的前面

    题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序, 使得所有的奇数位于数组的前半部门,所有的偶数位于数组的后半部门. 这一题一看其实是很简单的,当然在不考虑效率的情况可以这样考虑 我们将 ...

随机推荐

  1. json序列化后日期如何变回来

    日期格式为 日期小于10的时候 占一位 比如 2019年9月1日 2015/9/1 function ChangeDateFormat(cellval) {           var date = ...

  2. MySQL安装(以程序的方式启动)zip版

    电脑环境 win10 64位 企业版 1.解压zip文件到某路径下. 2.复制目录下的my-default.ini 改名字(my.ini) 3.打开my.ini [mysqld]下面加上charact ...

  3. C++的数据类型

    C++的数据类型 计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数.浮点数.字符等形式). 不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组).数据结构指的是数据的组 ...

  4. JNI/NDK开发指南(开山篇)

    转载请注明出处:http://blog.csdn.net/xyang81/article/details/41759643 相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术, ...

  5. 在windows下创建.gitignore文件

    1.使用另存为的方式   2.在win7下,文件名输入 ”.gitignore.“ http://hbiao68.iteye.com/blog/2055496 http://lyhopq.github ...

  6. Android学习之Image操作及时间日期选择器

    一.基础学习 1.ImageView是图片容器,就相当于RadioGroup是RadioButton的容器一样,是View的直接子类. 1: <ImageView 2: android:id=& ...

  7. HTML表单和验证事件

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  8. git ignore 的使用

    http://www.barretlee.com/blog/2015/09/06/set-gitignore-after-add-file/ 需要注意的 **: 如果一个 pattern 以 ** 开 ...

  9. .net 利用 GZipStream 压缩和解压缩

    1.GZipStream 类 此类在 .NET Framework 2.0 版中是新增的. 提供用于压缩和解压缩流的方法和属性 2.压缩byte[] /// <summary> /// 压 ...

  10. WordPress RokNewsPager插件‘thumb.php’多个安全漏洞

    漏洞名称: WordPress RokNewsPager插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-369 发布时间: 2013-09-24 更新时间: 201 ...