剑指offer之编程(九)
来源:互联网 发布:java设计模式优缺点 编辑:程序博客网 时间:2024/06/10 11:26
题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。
思路:
看到题目,由于题目要求是将所有的偶数都放在后半部分,可以想到遍历数组,遇到一个偶数就将其放到数组最后,这样遍历一次数组即可完成。另一种比较好的是使用快排的思路,熟悉快排就可以知道,可以使用两个指针 head 和 tail,分别从头和尾开始遍历,当head指向的偶数,tail指向的是奇数,那么就交换,直到head指向的位置在tail之后即可。不过这种算法不能保证偶数或奇数之间的原来的先后顺序,但第一个算法可以保证这个原有的顺序。
代码如下:
import java.util.*;public class Main15 {public static void main(String[] args) {Scanner s = new Scanner(System.in);int n = s.nextInt();int a[] = new int[n];for(int i=0;i<n;i++){a[i] = s.nextInt();}a = reArray(a);for(int i=0;i<n;i++){System.out.println(a[i]);}}public static int[] reArray(int []array){if(array==null || array.length==0)return null;int headIndex = 0; //头指针int tailIndex = array.length-1; //为指针while(headIndex<tailIndex){while(headIndex<tailIndex && (array[headIndex]%2)!=0) //0x1是16进制的数,0x是16进制数的标志,0x1和一个数做与(&)运算可以判断这个数的奇偶性{headIndex++;}while(tailIndex>headIndex && (array[tailIndex]%2)==0) //循环找出奇数{tailIndex--;}if(headIndex<tailIndex) //交换位置{int i = array[headIndex];array[headIndex] = array[tailIndex];array[tailIndex] = i;}}return array;}}
本人经验,仅供参考!
0 0
- 剑指offer之编程(九)
- 剑指offer经典编程(九)
- 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
- 剑指offer之九---矩形覆盖
- 剑指offer之编程(一)
- 剑指offer之编程(二)
- 剑指offer之编程(三)
- 剑指offer之编程(四)
- 剑指offer之编程(五)
- 剑指offer之编程(六)
- 剑指offer之编程(七)
- 剑指offer之编程(八)
- 剑指offer之编程(十)
- 剑指offer之编程(十一)
- 剑指offer之编程(十二)
- 剑指offer之编程(十三)
- 剑指offer之编程(十四)
- 剑指offer之编程(十五)
- 78. Subsets
- ubuntu下安装thrift
- interview sorting algorithm summary
- TensorFlow 从入门到精通(二):MNIST 例程源码分析
- Git 常用命令使用
- 剑指offer之编程(九)
- PAT乙级—1039. 到底买不买(20)-native
- Linux下部署项目的一些注意事项
- 并查集 xcoj 1234 ZJTZYRC筛offer
- 1019 Problem S
- 在Tachyon运行Spark应用程序
- 两阶段提交和三阶段提交的理解
- adb logcat 查看日志命令行用法(祥版)
- 移动直播技术秒开优化经验