- 题目
- https://leetcode.com/problems/sort-array-by-parity/description/
- 题目大意是给你一个数组,将偶数排在奇数前面,返回数组。
- 解题思路
- 最简单的思路是依次遍历,每当碰到一个奇数,就从之后的数组元素中找出一个偶数,进行遍历,如果找不到,说明该元素之后的元素全是奇数,那么可以直接返回数组,如果找到,则进行交换,然后再遍历下一个元素。该方法的算法时间复杂度是O(n^2)
-
vector<int> sortArrayByParity(vector<int>& A) { int i, j; for( i = 0; i < A.size(); ++i ){ if( A[i] % 2 != 0 ) /*遍历到奇数*/ { for( j = i + 1; j < A.size(); ++j ) { if( A[j] % 2 == 0 ) { swap(A[i], A[j]); /*i位置之后找到偶数,交换*/ break; } } if( j == A.size()) return A; } } return A; }
- 想到的是用空间换取时间,于是我们新建一个数组,每次遍历如果是偶数从数组的头部插入,如果是奇数则从数组的尾部插入。 这次的结果是beat 99.69%还可以。
-
vector<int> sortArrayByParity(vector<int>& A) { if( A.size() == 0 || A.size() == 1 ) return A; vector<int> res; for( auto i : A ){ if( i % 2 == 0 ) res.insert( res.begin(), i); else res.push_back(i); } return res; }