题目描述

代码:
方法一:
创建两个数组,一个存放奇数,一个存放偶数
然后将存放偶数的数组中的值补入奇数的数组中
int* reOrderArray(int* array, int arrayLen, int* returnSize ) {
// write code here
*returnSize = arrayLen;
int* ret = (int*)malloc(sizeof(int)*arrayLen);
int brr[arrayLen];
int j = 0;
int bj = 0;
for(int i = 0;i<arrayLen;i++)
{
if(array[i]%2 == 1) ret[j++] = array[i];
else brr[bj++] = array[i];
}
for(int i = 0;i<bj;i++)
ret[j++] = brr[i];
return ret;
}
class Solution {
public:
void reOrderArray(vector<int> &array) {
int j1 = 0;
int j2 = 0;
int arr[array.size()];
for(int i = 0;i<array.size();i++)
{
if(array[i] % 2 == 1) array[j1++] = array[i];
else arr[j2++] = array[i];
}
for(int i = 0;i<j2;i++)
array[j1++] = arr[i];
}
};
方法二:
遍历数组,将奇数放在前面,偶数放在后面
当遇见奇数时,将奇数前面的所有偶数向后移动 一位,然后奇数放在偶数的第一位
依次下去
C++
class Solution {
public:
void reOrderArray(vector<int>& array) {
int k = 0;
for (int i = 0; i < array.size(); ++i) {
if (array[i] & 1) {
int temp = array[i];
int j = i;
while (j > k) {
array[j] = array[j - 1];
j--;
}
array[k++] = temp;
}
}
}
};
C
int* reOrderArray(int* array, int arrayLen, int* returnSize ) {
// write code here
int index = 0;
for (int i = 0; i < arrayLen; i++)
{
if ((array[i]&1) == 1)
{
int tmp = array[i];
int j = i;
while (j > index)
{
array[j] = array[j-1];
j--;
}
array[index++] = tmp;
}
}
*returnSize = arrayLen;
return array;
}
第一种方法在牛客上面运行
时间:2
空间300以下
博客介绍了用C和C++实现奇偶排序的两种方法。方法一是创建两个数组分别存放奇数和偶数,再将偶数补入奇数数组;方法二则是遍历数组,把奇数放前、偶数放后,遇奇数时将其前偶数后移一位,奇数放首位。还提及第一种方法在牛客上的运行情况。

被折叠的 条评论
为什么被折叠?



