时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
思路:
一:1、找位置:evenPoint从左往右找第一个偶数,oddPoint从evenPoint+1的位置找第一个奇数
2、进行移动:将下标为eventPoint,evenPoint+1,。。。,oddPoint-1的数据整体向右移动一位,最后将找到的oddPoint位置的奇数放到evenPoint的位置
3、终止条件:evenPoint向后查找失败
class Solution { public: void reOrderArray(vector<int> &array) { if(array.empty()) { return; } int oddPoint,evenPoint=0; int size = array.size(); while(evenPoint < size) { while(evenPoint < size && !isEven(array[evenPoint])) { evenPoint++; } oddPoint = evenPoint+1; while(oddPoint < size && isEven(array[oddPoint])) { oddPoint++; } if(oddPoint < size) { int temp = array[oddPoint]; for(int i = oddPoint -1;i >= evenPoint;i--) { array[i+1] = array[i]; } array[evenPoint++] = temp; } else { break; } } } bool isEven(int n) { if(n % 2 == 0) return true; return false; } };
二、利用vector容器的特点实现该功能,首先将单独将奇数、偶数进行分开重组,然后再放回到array vector容器中
class Solution { public: void reOrderArray(vector<int> &array) { if(array.empty()) { return ; } vector<int> temp; int size = array.size(); for(int i =0;i < size;i++) { if(array[i] % 2 == 1) { temp.push_back(array[i]); } } for(int i =0;i < size;i++) { if(array[i] % 2 ==0) { temp.push_back(array[i]); } } array.clear(); for(int i = 0;i < temp.size();i++) { array.push_back(temp[i]); } } };