每天一道算法题——调整数组顺序使奇数位于偶数前面
来源:互联网 发布:midi软件下载 编辑:程序博客网 时间:2024/06/09 19:40
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
测试用例:
[1,2,3,4,5,6,7]
对应输出应该为:
[1,3,5,7,2,4,6]
分析:
1.这个问题第一个想到的自然就是新建一个额外的数组来存放顺序调整后的数组。此方法是采取空间换时间的方法。时间复杂度为O(n)。
源码如下:
public class Test1 { public void reOrderArray(int [] array) { if (array.length==0||array.length==1) {//如果数组元素数量小于2,那也就不用排了 return; } int oddCount = 0,oddBegin=0;//此处设置两个变量作为奇数数量计数器和奇数开始的位置 int[] newArray=new int[array.length];//建一新数组存放 for (int i = 0; i < array.length; i++) { if (array[i]%2==1) { oddCount++;//奇数数量增加 } } for (int i = 0; i < array.length; i++) { if (array[i]%2==1) { newArray[oddBegin++] = array[i]; }else { newArray[oddCount++] = array[i];//奇数数量也是偶数开始的位置 } } for (int i = 0; i < array.length; i++) { array[i] = newArray[i]; } }}
2.另外一个方法就是使用插入排序,但是这个的时间复杂度为O(n2),一般是要再进行优化的。
源码如下:
public class Test1 { public void reOrderArray(int[] array) { if (array.length == 0 || array.length == 1) {// 如果数组元素数量小于2,那也就不用排了 return; } for (int i = 0; i < array.length; i++) { if (array[i] % 2 == 1) { int temp = array[i]; int j = i - 1; while (j >= 0 && array[j] % 2 == 0) { array[j + 1] = array[j]; j--; } array[j + 1] = temp; } } }}
运行测试:
第一种:
运行时间:16ms
占用内存:21424k
第二种:
运行时间:17ms
占用内存:21404k
总结:
考虑一个算法问题考虑算法原型确实是有必要的,但也不能拘泥于算法原型,在这次例子中,使用排序的解法反而没有第一种方法来的好。所以面对问题有时候重要的不是方法论,循规蹈矩,而是有自己 的想法,去积极地寻找规律才行=(●ˇ∀ˇ●)=
阅读全文
0 0
- 每天一道算法题——调整数组顺序使奇数位于偶数前面
- 算法题/调整数组顺序使奇数位于偶数前面
- 算法题目---调整数组顺序使奇数位于偶数前面
- 数据结构——算法之(026)( 调整数组顺序使奇数位于偶数前面)
- 经典算法——调整数组顺序使奇数位于偶数前面
- 算法系列——调整数组顺序使奇数位于偶数前面
- 剑指offer—编程题14(调整数组顺序使奇数位于偶数前面)
- 程序员面试题精选100题(29)-调整数组顺序使奇数位于偶数前面[算法]
- 程序员面试题精选100题(29)-调整数组顺序使奇数位于偶数前面[算法]
- 剑指offer-算法题练习:part15 调整数组顺序使奇数位于偶数前面
- 【数组3】-调整数组顺序使奇数位于偶数前面
- 数组3:调整数组顺序使奇数位于偶数前面
- 重拾算法之剑指Offier——调整数组顺序使奇数位于偶数前面
- 微软,Google面试题 (29) —— 调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 《剑指offer》——调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- javaBean构造器
- 《Android》Android Studio打开项目卡死
- 使用#define指令和#undef指令进行宏定义和终止宏定义
- 视频监控安防平台-GB28181-系统目录查询TCP协议和系统录像文件检索TCP协议
- TabLayout与ViewPage联用
- 每天一道算法题——调整数组顺序使奇数位于偶数前面
- Java:一个帝国的诞生
- Java类、对象和实例的理解
- mysql命令大全
- 条件随机场
- git review
- TCP/IP协议族
- [汉字编码报错] UnicodeEncodeError- 'ascii' codec can't encode characters in position 0-1- ordinal not in r
- 即刻开始!使用Typescript开发Node