题解 | #调整数组顺序使奇数位于偶数前面(一)#
调整数组顺序使奇数位于偶数前面(一)
https://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b
解法1
时间复杂度O(n)
空间复杂度O(n)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
function reOrderArray( array ) {
// write code here
const evenArray = []
const oddArray = []
for(let i = 0; i < array.length; i ++) {
if (array[i] & 1 === 1) {
oddArray.push(array[i])
} else {
evenArray.push(array[i])
}
}
return oddArray.concat(evenArray)
}
module.exports = {
reOrderArray : reOrderArray
};
解法2
时间复杂度O(n^2)
空间复杂度O(1)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
function reOrderArray( array ) {
// write code here
let oddIndex = 0
let evenIndex = 0
while (oddIndex < array.length && evenIndex < array.length) {
// find first even
while ((array[evenIndex] & 1) !== 0 && evenIndex < array.length) {
evenIndex++
}
// find first odd after the first even
oddIndex = evenIndex + 1
while ((array[oddIndex] & 1) !== 1 && oddIndex < array.length) {
oddIndex++
}
if (oddIndex >= array.length || evenIndex >= array.length) break
// swap
const oddTemp = array[oddIndex]
while (oddIndex > evenIndex) {
array[oddIndex] = array[oddIndex - 1]
oddIndex--
}
array[evenIndex] = oddTemp
evenIndex++
}
return array
}
module.exports = {
reOrderArray : reOrderArray
};