剑指offer之编程(九)
2016-05-22 23:20
267 查看
题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。
思路:
看到题目,由于题目要求是将所有的偶数都放在后半部分,可以想到遍历数组,遇到一个偶数就将其放到数组最后,这样遍历一次数组即可完成。另一种比较好的是使用快排的思路,熟悉快排就可以知道,可以使用两个指针 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
;
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;
}
}
本人经验,仅供参考!
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。
思路:
看到题目,由于题目要求是将所有的偶数都放在后半部分,可以想到遍历数组,遇到一个偶数就将其放到数组最后,这样遍历一次数组即可完成。另一种比较好的是使用快排的思路,熟悉快排就可以知道,可以使用两个指针 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
;
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;
}
}
本人经验,仅供参考!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树