剑指 offer:调整数组顺序使奇数位于偶数前面
来源:互联网 发布:java线程应用场景 编辑:程序博客网 时间:2024/06/02 16:15
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:i指向数组从左到右第一个偶数,j从i+1的位置向后遍历,直到找到第一个奇数,此时将该奇数利用插入排序插入到i所在的偶数前面。
public class Main { public void reOrderArray(int [] array) { int i = 0; int j = 0; int temp = 0; while(i<array.length&&j<array.length) { while (i<array.length&&isOddOrEven(array[i]) == 1) {i++;} j = i + 1; while (j<array.length&&isOddOrEven(array[j]) == 0) {j++;} if(j<array.length) { for (int k = j; k > i; k--) { temp = array[k]; array[k] = array[k - 1]; array[k - 1] = temp; } } } } public static int isOddOrEven(int num){ if(num%2==0){ return 0; }else{ return 1; } }}
思路二:借助于队列和新建一个数组B,对原数组遍历,奇数放B中,偶数放队列中,最后将队列中的偶数防B中。
import java.util.LinkedList;import java.util.Queue;public class Main { public static void main(String[] args) { int array[] = new int[]{3,4,4,7,5}; for(int key:reOrderArray(array)){ System.out.print(key+" "); } } public static int[] reOrderArray(int []array) { int newArray[] = new int[array.length]; Queue<Integer> queue = new LinkedList<Integer>(); int j=0; for(int i=0; i<array.length; i++){ if(isOddOrEven(array[i])==1){ newArray[j]=array[i]; j++; }else { queue.offer(array[i]); } } for(;j<newArray.length;j++){ newArray[j] = queue.poll(); } return newArray; } public static int isOddOrEven(int num){ if(num%2==0){ return 0; }else{ return 1; } }}
变形题:如果不要求奇数和奇数,偶数和偶数之间的相对位置不变。可以采用类似于快排的方法。如下:
public class Solution { public void reOrderArray(int [] array) { int i = 0; int j = array.length-1; int temp = 0; while(i<j){ while(isOddOrEven(array[j])==1){j--;} while(isOddOrEven(array[i])==0){i++;} if(i<j){ temp = array[j]; array[j] = array[i]; array[i] = temp; } } } public int isOddOrEven(int num){ if(num%2==0){ return 0; }else{ return 1; } }}
0 0
- 剑指offer:调整数组顺序使奇数位于偶数前面
- 剑指offer--调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 《剑指offer》调整数组顺序使奇数位于偶数前面
- 剑指 offer:调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- [剑指offer]调整数组顺序使奇数位于偶数前面
- 剑指offer:调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- 剑指offer|调整数组顺序使奇数位于偶数前面
- 《剑指offer》调整数组顺序使奇数位于偶数前面
- 剑指Offer:调整数组顺序使奇数位于偶数前面
- 剑指offer - 调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- c++输出输入流
- Linux android studio :'tools.jar' seems to be not in Android Studio classpath.
- Apache Zepplin 安装详解
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- 保留重复出现的字符串
- 剑指 offer:调整数组顺序使奇数位于偶数前面
- 数据存储--SharedPreferences--仿QQ登陆界面记住密码效果
- 小技巧,使用低版本的VS打开高版本的解决方案(使用VS2008打开VS2010的解决方案--同样适用于其他版本)
- 比较好的博客链接
- 关于flash播放器不为人知的四大点
- iOS UIButton如何正确调整imageView及titleLabel的位置
- wincc VBS脚本解密
- linux服务器远程桌面配置-X2Go 方式
- Java整数转换成字符