剑指Offer——调整数组顺序使奇数位于偶数前面
2017-07-01 10:30
274 查看
Question
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。Solution
这道题我想到两种解法,一种是类似于冒泡排序,如果前面一个数是偶数,后面一个数是奇数,那么就交换他们两个的位置,最坏情况下时间复杂度为O(n^2),但是有一个好处就是可以就地完成,空间复杂度为O(1)还有就是用空间换时间,创建两个数组分别用来存奇数和偶数,然后最后在复制到原来数组中,时间复杂度为O(n),空间复杂度为O(n)
Code
class Solution { public: // 空间换时间 void reOrderArray(vector<int> &array) { // 1, 3, 4, 5, 2, 6, 7 // 1, 3, 5, 7, 4, 2, 6 vector<int> odds; vector<int> evens; for (int i : array) { if (i % 2 == 0) { evens.push_back(i); } else odds.push_back(i); } for (int i = 0; i < odds.size(); i++) { array[i] = odds[i]; } for (int i = 0, j = odds.size(); i < evens.size(); i++, j++) { array[j] = evens[i]; } } // 思想类似于冒泡,前偶后奇交换 void reOrderArray(vector<int> &array) { if (array.size() <= 1) return; for (int i = 0; i < array.size(); i++) { for (int j = 0; j < array.size() - i - 1; j++) { if (array[j] % 2 == 0 && array[j + 1] % 2 != 0) swap(array[j], array[j + 1]); } } } };
相关文章推荐
- 剑指offer系列-T14_1调整数组顺序使奇数位于偶数前面
- 《剑指offer》调整数组顺序使奇数位于偶数前面
- 牛客网-《剑指offer》-调整数组顺序使奇数位于偶数前面
- 《剑指Offer》之“调整数组顺序使奇数位于偶数前面”
- 《剑指offer14——调整数组顺序使奇数位于偶数前面》
- 剑指offer(13)—调整数组顺序使奇数位于偶数前面
- 剑指Offer 面试题21:调整数组顺序使奇数位于偶数前面 Java代码实现
- 剑指Offer系列-面试题14:调整数组顺序使奇数位于偶数前面
- 剑指Offer(21)调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14 调整数组顺序使奇数位于偶数前面
- 剑指offer(15):调整数组顺序使奇数位于偶数前面
- 剑指offer-面试题14.调整数组顺序使奇数位于偶数的前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 剑指offer系列之12:调整数组的顺序使奇数位于偶数前面
- 《剑指Offer》 调整数组顺序使奇数位于偶数前面
- 《剑指Offer》学习笔记--面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14——调整数组顺序使奇数位于偶数前面
- 《剑指offer》刷题笔记(代码完整性):调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14:调整数组顺序使奇数位于偶数前面
- 《剑指offer》-调整数组顺序使奇数位于偶数前面