剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现
2015-06-03 20:57
627 查看
题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
解题思路:
这个题目的思路还是很简单的,就是利用交换的思想。
两个指针,一个从前往后一个从后往前,在相遇之前,如果前面的指针遇到偶数就和后面指针遇到的奇数交换,其实就是快排的内部的一个过程。这个题的重点在于可扩展性,也就是说不局限于偶数和奇数 或者大小或者把能被3整除的数移动到不能被3整除的数的前面,方法就是定义一个接口,实现判断的方法。
代码如下:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
解题思路:
这个题目的思路还是很简单的,就是利用交换的思想。
两个指针,一个从前往后一个从后往前,在相遇之前,如果前面的指针遇到偶数就和后面指针遇到的奇数交换,其实就是快排的内部的一个过程。这个题的重点在于可扩展性,也就是说不局限于偶数和奇数 或者大小或者把能被3整除的数移动到不能被3整除的数的前面,方法就是定义一个接口,实现判断的方法。
代码如下:
import java.util.Arrays; interface JudgeMent{ boolean judge(int i); } public class ReorderTest { public static void reorder(int[] data, JudgeMent judgeMent){ if(data == null || data.length == 0){ return; } int start = 0; int end = data.length - 1; while(start < end){ while(start < end && judgeMent.judge(data[start])){ start++; } while(start < end && !judgeMent.judge(data[end])){ end--; } if(start < end){ int tmp = data[start]; data[start] = data[end]; data[end] = tmp; } } } public static void main(String[] args) { JudgeMent judgeMent = new JudgeMent() { @Override public boolean judge(int i) { if((i & 1) == 0){ return false; } return true; } }; int a[] = new int[]{1, 2, 3, 4, 5}; reorder(a, judgeMent); System.out.println(Arrays.toString(a)); int b[] = null; reorder(b, judgeMent); System.err.println(Arrays.toString(b)); } }
相关文章推荐
- 黑马程序员_Java_IO流(一)
- 黑马程序员_Java_集合总结
- 黑马程序员_Java集合概述
- 黑马程序员_java语言_异常类和File类的分析
- 黑马程序员-----集合框架(Collections,Arrays,for循环等和其他对象)
- 黑马程序员_java语言_Map集合
- 黑马程序员-java之IO流应用
- 黑马程序员_java语言_ArrayList和泛型的概述
- 程序员的量化交易之路(16)--Hibernate注解总结_转发的(4)
- 程序员的量化交易之路(15)--Cointrader之EntityBase类(3)
- Android Java面试——语言基础
- 华为的JAVA面试题及答案(部分)
- 面试中自我介绍技巧
- 面试礼仪小常识
- 程序员的量化交易之路(14)--Cointrader数据表(2)
- 黑马程序员——Java高新技术_反射
- 程序员的量化交易之路(13)--Cointrader类图(1)
- 黑马程序员-----集合框架(Map和泛型)
- java中基本类型占用字节数 (面试总问)
- 黑马程序员------集合框架(Collection)