【发布时间】:2020-09-10 01:33:10
【问题描述】:
这是我的面试问题,我可以解决,但是留下了面试官的便条,说这不是优化的代码,我无法在优化的解决方案中解决它,任何人都可以帮助。
问题:给定一个数组array1,按照格式重新排列数组
- 所有负数及其绝对数首先插入到数组中(已排序)。
- 所有剩余的项目都应连接到新数组(已排序)
//input
var array = [8,7,0,6,4,-9,-7,2,-1,3,5,1,10];
//output
var array2 = [-7,7,-1,1,-9,0,2,3,4,5,6,8,10];
我的代码:
function sort(arr){
var arrange = arr.sort((a, b)=>{ return a-b});
var array1=[];
for(let i=0; i<arrange.length; i++){
let firstItem = Math.abs(arrange[i]);
for(let j=i+1; j<arrange.length; j++){
if(firstItem === Math.abs(arrange[j])){
array1.push(arrange[i], arrange[j])
}
}
}
arrange = arrange.filter((item, i)=>{
return array1.indexOf(item) === -1
})
return [...array1, ...arrange]
}
console.log(sort(array));
也请给出一些提示,我的方法有什么问题。
注意:我写的代码是o(n^2),他想要一个O(log n),他的意思是,不用嵌套for循环,我们可以解决。我们可以吗?
【问题讨论】:
-
将负数和正数放在单独的排序数组中,反转一个,进行合并以找到对,再次反转并附加其余的。
标签: javascript arrays optimization logic