题目
https://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593
题意
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题解
插入排序的思想,从前往后扫描,遇到偶数则往后寻找下一个奇数,然后将奇数调整到这些偶数的前面,最坏情况下,就是前半部分全为偶数,后半部分全为奇数,时间复杂度O(N*N)。
1 | class Solution { |
发现一个STL方法,stable_partition,依据条件稳定划分,两组元素各维持相对顺序,即划分后,各组中元素的先后关系保持不变。
至于复杂度:
1 | If enough extra memory is available, linear in the distance between first and last: Applies pred exactly once to each element, and performs up to that many element moves. |
1 | class Solution { |
当然可以用空间换时间,新建一个数组,从前往后扫描一遍,将奇数放到前面,然后从后往前扫一遍,将偶数放到后面,随后复制回去。