剑指offer——调整数组顺序使奇数位于偶数前面
来源:互联网 发布:directmail 阿里云 编辑:程序博客网 时间:2024/06/04 18:50
面14(和书中的题目有差别,书中不要求相对位置不变)
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
自己的思路:
暴力方法,先遍历一遍,把偶数和奇数分别放在两个list里,然后再遍历list,将数组重新赋值,时间复杂度O(N),空间复杂度较高
public void reOrderArray(int [] array) { ArrayList<Integer> list1 = new ArrayList(); ArrayList<Integer> list2 = new ArrayList(); for(int i = 0; i<array.length; i++){ if(array[i]%2==0) list2.add(array[i]); else list1.add(array[i]); } for(int i = 0; i<list1.size(); i++) array[i] = list1.get(i); for(int i = list1.size(); i<array.length; i++) array[i] = list2.get(i-list1.size()); }
不用List:
首先统计奇数的个数
然后新建一个等长数组,设置两个指针,奇数指针从0开始,偶数指针从奇数个数的末尾开始 遍历,填数
public void reOrderArray(int [] array) { if(array.length==0||array.length==1) return; int oddCount=0,oddBegin=0; int[] newArray=new int[array.length]; for(int i=0;i<array.length;i++){ if((array[i]&1)==1) oddCount++; } for(int i=0;i<array.length;i++){ if((array[i]&1)==1) newArray[oddBegin++]=array[i]; else newArray[oddCount++]=array[i]; } for(int i=0;i<array.length;i++){ array[i]=newArray[i]; } }
不用保证顺序的方法,就是堆排:
public class Solution { public void reOrderArray(int [] array) { int first = 0; int last = array.length-1; int temp = 0; while(last>first){ while(last>first&&(array[last]%2)==0) last--; while(last>first&&(array[first]%2)==1) first++; temp = array[last]; array[last] = array[first]; array[first] = temp; } }}
阅读全文
0 0
- 剑指offer:调整数组顺序使奇数位于偶数前面
- 剑指offer--调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 《剑指offer》调整数组顺序使奇数位于偶数前面
- 剑指 offer:调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- [剑指offer]调整数组顺序使奇数位于偶数前面
- 剑指offer:调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- 剑指offer|调整数组顺序使奇数位于偶数前面
- 《剑指offer》调整数组顺序使奇数位于偶数前面
- 剑指Offer:调整数组顺序使奇数位于偶数前面
- 剑指offer - 调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- 亮风台HIAR增强现实SDK的使用入门(扫描一张图片,在图片上出现一个物体)
- 三级联动实例代码
- java读取配置文件
- mysql——数据库设计中int与varchar中的长度含义
- PHP 5大运行模式
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 利用xib自定义cell xib里面包含两个cell时点击Button没有响应问题
- git学习
- MySQL入门
- android.os.NetworkOnMainThreadException
- The user specified as a definer ('root'@'%') does not exist 解决方法
- 【转】 字符串的全排列和组合算法
- easyUI 权限管理之菜单管理
- JNI调用c/c++,env->和(*env)->是有区别的