调整数组顺序使奇数位于偶数前面(代码的完整性)
来源:互联网 发布:js导出excel兼容ie 编辑:程序博客网 时间:2024/06/06 03:04
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路一:新建一个数组,依次存入奇数,最后将原来数组中的偶数存入奇数数组的后面
时间复杂度为O(n),空间复杂度为O(n)。
public class Solution { public void reOrderArray(int [] array) { int[] odd = new int[array.length]; int oddCount = 0; for (int i = 0; i < array.length; i++) { if (array[i] % 2 == 1) { odd[oddCount] = array[i]; array[i] = 0; oddCount++; } } for (int i = 0; i < array.length; i++) { if (array[i] != 0) { odd[oddCount] = array[i]; oddCount++; } } for (int i = 0; i < array.length; i++) array[i] = odd[i]; }}
1.要想保证原有次序,只能顺次移动或相邻交换。
2.i从左向右遍历,找到第一个奇数temp。
3.j从i-1开始向左找,如果找到一个偶数,则将它向右移一位,直到找到前一个奇数或者回到数组开始的地方,将这个奇数temp插入。
时间复杂度为O(n^2),空间复杂度为O(1)。
public class Solution { public void reOrderArray(int [] array) { int temp = 0; for (int i = 1; i < array.length; i++) { if (array[i] % 2 == 1) { temp = array[i]; int j = i - 1; while (array[j] % 2 == 0) { array[j + 1] = array[j]; j--; if (j < 0) break; } array[++j] = temp; } } }}
思路三:与思路二类似
1.要想保证原有次序,只能顺次移动或相邻交换。
2.i从左向右遍历,找到第一个偶数。
3.j从i+1开始向后找,直到找到第一个奇数。
4.将[i,...,j-1]的元素整体后移一位,最后将找到的奇数放入i位置,然后i++。
时间复杂度为O(n^2),空间复杂度为O(1)。
public class Solution { public void reOrderArray(int [] array) { int temp = 0; for (int i = 0; i < array.length; i++) { if (array[i] % 2 == 0) { for (int j = i + 1; j < array.length; j++) { if (array[j] % 2 == 1) { temp = array[j]; int m = j - 1; for (; m >= i; m--) array[m + 1] = array[m]; array[++m] = temp; break; } } } } }}
思路四:类似冒泡算法,前偶后奇数就交换。
时间复杂度为O(n^2),空间复杂度为O(1)。
public class Solution { public void reOrderArray(int [] array) { int temp = 0; for (int i = 0; i < array.length; i++) { for (int j = array.length - 1; j > i; j--) { if (array[j - 1] % 2 == 0 && array[j] % 2 == 1) { temp = array[j - 1]; array[j - 1] = array[j]; array[j] = temp; } } } }}
阅读全文
0 0
- 调整数组顺序使奇数位于偶数前面(代码的完整性)
- 剑指offer 14题 【代码的完整性】调整数组顺序使奇数位于偶数前面
- 代码的完整性-面试题14-调整数组顺序使奇数位于偶数前面
- 剑指offer:(13)代码的完整性: ]调整数组顺序使奇数位于偶数前面
- 《剑指offer》刷题笔记(代码完整性):调整数组顺序使奇数位于偶数前面
- 剑指offer 3.3 代码的完整性4-在O(n)时间内调整数组顺序,使奇数位于偶数前面
- 【剑指offer】3.3代码的完整性——面试题14:调整数组顺序使奇数位于偶数前面
- 调整数组的顺序使奇数位于偶数的前面
- 调整数组的顺序使奇数位于偶数的前面
- 调整数组顺序使奇数位于偶数的前面
- 调整数组顺序使奇数位于偶数的前面
- 调整数组顺序使奇数位于偶数的前面
- 调整数组顺序使奇数位于偶数的前面
- 边看边写(调整数组顺序使奇数位于偶数前面)
- 调整数组顺序使奇数位于偶数前面(java)
- 【数组3】-调整数组顺序使奇数位于偶数前面
- 数组3:调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面,偶数和偶数之间的相对位置不变
- 关于读取手机联系人应该用的Uri
- HTTP协议基础
- 数据预处理备忘
- 吴恩达深度学习课程笔记
- 计算球体积
- 调整数组顺序使奇数位于偶数前面(代码的完整性)
- BZOJ 4102 [Usaco2015 Open] 图上DP 解题报告
- 常见端口占用情况汇总(持续更新)
- 实验三 栈的基本操作
- 第二次作业!
- [Unity]Android Build Support 官方组件的下载安装问题
- HDU 6113 度度熊的01世界(简单dfs)
- majority算法及Python 3.5实现
- Spring+SpringMVC+MyBatis整合配置