输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解:
第一种思路很简短,遍历一遍,奇数放一个array,偶数放一个array。
function reOrderArray(array)
{
if(array.length<2)return array;
var leftA=[], rightA=[];
for(var i in array){
if((array[i]%2)==1){
leftA.push(array[i]);
}else {
rightA.push(array[i]);
}
}
return leftA.concat(rightA);
}
这种算法时间复杂度为o(n),但是牺牲了内存。
第二种使用了冒泡排序的思想,如果偶数后面是奇数就交换。
function reOrderArray(array)
{
if(array.length<2)return array;
for(var i=0;i<array.length;i++){
for(var j=array.length-1;j>i;j--){
if((array[j]%2==1) && (array[j-1]%2===0)){
var temp = array[j];
array[j] = array[j-1];
array[j-1]= temp;
}
}
}
return array;
}
这种算法时间复杂度较大,O(n2),但是不占用过多的内存。
最后,两种算法在牛客网跑都是30ms,ㄟ( ▔, ▔ )ㄏ
网友评论