剑指offer面试题之调整数组顺序奇数在偶数之前
来源:互联网 发布:保温杯推荐 知乎 编辑:程序博客网 时间:2024/05/29 11:07
1,问题:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
2,想法:
(1),从头往后扫描,遇到交换情况就交换,但需要移动来保持相对位置不变。
(2),设置辅助空间,扫描原数组,遇到偶数存在辅助空间中,遇到奇数就覆盖原数组的前段,最后再把辅助空间中的数赋值给原数组。
3,在牛客网上的代码为:
class Solution {public: //自己想的思路,用的辅助空间比较少 /*bool jiOu(int n)//判断奇偶 { if ((n & 1) == 1) { return false; } else return true; } void swap(int &m, int &n) { int temp; temp = m; m = n; n = temp; } //设两个指针, //思想是: //从前往后扫描,遇到偶奇情况就交换,并移动保持偶数之间相对位置不变 //若是偶偶情况第一个指针不动,第二个指针向后移动一位,这样可以保持相对位置不变 void reOrderArray(vector<int> &array) { if (array.empty()) { return; } int i,j,k; int length = array.size(); int tempval;//移动时作副本值 for (i = 0, j = 1; j < length;) { if (jiOu(array[i]) && jiOu(array[j]))//偶偶情况 { j++; } else if (!jiOu(array[i]) && !jiOu(array[j]))//奇奇情况 { i++; j++; } else if (!jiOu(array[i]) && jiOu(array[j]))//奇偶情况 { i++; j++; } else//偶奇情况,需要交换和移动 { tempval = array[i];//保存偶数值,方便移动后插入 swap(array[i], array[j]); for (k = j - 1; k >= i + 1; k--) { array[k + 1] = array[k]; } array[k + 1] = tempval; } } } */ //另一条思路:建立辅助空间,扫描一遍数组,把偶数读进去 //奇数覆盖array数组的前段数字 //用的辅助空间应该多一些 void reOrderArray(vector<int> &array) { if (array.empty()) { return; } int m = array.size(); vector<int> temp(m); int i = -1; int j = -1; for (int k1 = 0; k1 < m; k1 ++) { if (array[k1] % 2 == 0)//偶数 { temp[++i] = array[k1]; } else { array[++j] = array[k1];//k1增长比j快,不会有覆盖后边值得情况 } } for (int k1 = 0; k1 <= i; k1 ++) { array[++j] = temp[k1]; } } };反省:
思路不是很清晰,编了很久才出来,不过自始至终都是自己闷头想出来的,还能接受!
1 0
- 剑指offer面试题之调整数组顺序奇数在偶数之前
- 剑指offer代码解析——面试题14调整数组顺序使奇数在偶数之前
- 剑指offer之面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer之面试题14调整数组顺序使奇数位于偶数前面
- 剑指Offer之面试题14:调整数组顺序使奇数位于偶数前面
- 剑指Offer学习之面试题14 :调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14 数组元素奇数调整到偶数之前
- 剑指Offer:面试题14 调整数组顺序使奇数位于偶数掐面
- 剑指offer之面试题14 调整数组顺序使奇数位于偶数前面 之菜鸟与小牛写法对比
- 剑指offer 之 调整数组顺序使奇数位于偶数之前
- [剑指offer][面试题14]调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14 调整数组顺序使奇数位于偶数前面
- 《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14—调整数组顺序使奇数位于偶数前面
- 《剑指Offer》学习笔记--面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现
- 【剑指Offer学习】【面试题14 :调整数组顺序使奇数位于偶数前面】
- 【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面
- stl之map介绍
- 练习一1000
- Python 学习笔记(一)
- 进程间8种通信方式
- nodejs
- 剑指offer面试题之调整数组顺序奇数在偶数之前
- start
- BZOJ1876SuperGCD
- 详解大端模式和小端模式
- 面试锦集
- 红黑树好文章(一)
- Android进程间通信
- Android进阶之AlertDialog自定义
- Ubuntu kylin的安装