要求
- 时间限制:1秒
- 空间限制:32768K
- 热度指数:388651
- 本题知识点: 数组
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
思路一:索引法
该方法需要构造辅助数组,时间复杂度为 O ( n ) O(n) O(n),空间复杂度也为 O ( n ) O(n) O(n)。
python实现
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
temp_array = []
for i in range(len(array)):
if array[i] % 2 == 1:
temp_array.append(array[i])
for i in range(len(array)):
if array[i] % 2 == 0:
temp_array.append(array[i])
return temp_array
- 运行时间:29ms
- 占用内存:5848k
C++实现
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int> temp_array;
for (int i=0; i<array.size(); i++)
if (array[i] % 2 == 1)
temp_array.push_back(array[i]);
for (int i=0; i<array.size(); i++)
if (array[i] % 2 == 0)
temp_array.push_back(array[i]);
array = temp_array;
}
};
- 运行时间:3ms
- 占用内存:488k
思路二:插入排序法
该方法使用了插入排序的思想,时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1)。
python实现
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
odd_count = 0
for i in range(len(array)):
if array[i] % 2 == 1:
temp = array[i]
for j in range(i-1, odd_count-1, -1):
array[j+1] = array[j]
array[odd_count] = temp
odd_count += 1
return array
- 运行时间:28ms
- 占用内存:5864k
C++实现
class Solution {
public:
void reOrderArray(vector<int> &array) {
int odd_count = 0; int temp;
for (int i=0; i<array.size(); i++){
if (array[i] % 2 == 1){
temp = array[i];
for (int j=i-1; j>=odd_count; j--)
array[j+1] = array[j];
array[odd_count] = temp;
odd_count++;
}
}
}
};
- 运行时间:3ms
- 占用内存:480k