例如var arr = [1, 3, 6, 10, 2, 7, 9];排序后var arr = [1, 2, 3, 6, 7, 9, 10];!!!特别说明,我没写错!!! 不是你们以为的先递增后递减!!! 那些想当然还踩别人题目的 怕不是常规题做多了!!!!这是我出去面试的时候碰见的,那个人特地强调不是先增后减!!!!!!不能用sort方法 ,纯原生的方法写
3 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
你的例子写错了吧,难道不应该是
var arr = [1, 3, 6, 10, 9, 7, 2];
这样的话,维护两个指针,一个从其往后,一个从后往前,谁小排谁,两个指针遇到了,就全排好了。
qq_笑_17
TA贡献1818条经验 获得超7个赞
let arr = [1, 3, 6, 10, 9, 7, 2];
function trans (arr) {
let i = 0
let j = arr.length - 1
let result = []
while (i <= j) {
if (arr[i] <= arr[j]) {
result.push(arr[i++])
} else {
result.push(arr[j--])
}
}
return result
}
trans(arr)
慕哥9229398
TA贡献1877条经验 获得超6个赞
如果确定时先递增再递减的数组, 直接头尾合并 时间复杂度 o(n)
思路
let i=0
let j=arr.length-1
let newArr = []
if(arr[i]<arr[j]){
newArr.push(arr[i++])
}else{
newArr.push(arr[j--])
}
加个循环 一遍就能排好
添加回答
举报
0/150
提交
取消