剑指offer11--让数组变成左边奇数右边偶数

来源:互联网 发布:淘宝上买中药材可靠吗 编辑:程序博客网 时间:2024/05/21 06:32

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

第一种是我自己的思路,虽然和正确的思路比较接近了,但是只能针对特定的数组
package 剑指offer;/*题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位予数组的后半部分。*//*public class Test14{public static void main(String []args){int []array = new int[]{2, 4, 6, 7, 1, 3, 5};int []result = ArrayOfOddFirst(array);for(int i = 0; i < result.length; i++){System.out.println(result[i]);}}public static int[]  ArrayOfOddFirst(int [] ary){if(ary == null)return null;// 使用中间分开,两边分别交换的方式int lengs = ary.length;int maxindex = lengs - 1;if(lengs%2 == 1){// 判读是奇数个数的数列,以中间点为中心int middleodd = lengs/2;for(int i = 0; i < middleodd; i++){if((ary[i]%2 == 0) && (ary[maxindex - 1]%2 == 1)){int temp = ary[i];ary[i] = ary[maxindex - i];ary[maxindex - i] = temp;}}}if(lengs%2 == 0){// 判读是偶数个数的数列int middleodd = lengs/2;for(int i = 0; i < middleodd; i++){if((ary[i]%2 == 0) && (ary[maxindex - 1]%2 != 0)){int temp = ary[i];ary[i] = ary[maxindex - i];ary[maxindex - i] = temp;}}}return ary;}}*//*------------------------上面是通过两边对称的方式来使数据交换的,有局限性--------------------------*/public class Test14{// 其实我上边的思路已经是比较接近了,不过我需要建立两个指针// 从两边开始向中间移动public static void main(String []args){int []array = new int[]{1, 4, 5, 7, 1, 8, 7};int []result = Test14.ArrayOfOddFirst(array);for(int i = 0; i < result.length; i++){System.out.println(result[i]);}}public static int[]  ArrayOfOddFirst(int [] ary){// 建立左指针和右指针int left = 0;int right = ary.length - 1;// 两个指针向中间移动,遇到左偶右奇的情况是,交换两个元素while(left != right){if(ary[left]%2 == 1){left++;}else if(ary[right]%2 == 0){right--;}else if((ary[left]%2 == 0) && (ary[right]%2 == 1)){int temp = ary[left];ary[left] = ary[right];ary[right] = temp;}}return ary;}}

失之毫厘、谬以千里
1 0
原创粉丝点击