題目給予一串數字陣列,將其元素平方並且排序成新的陣列
input1= [-4,-1,0,3,10]
output1= [0,1,9,16,100]
input2= [-7,-3,2,3,11]
output2= [4,9,9,49,121]
第一個寫法很直覺,但是時間複雜度高,因為使用 map 已經跑過一輪迴圈,之後的 sort 又跑了很多次迴圈去排列大小
input1= [-4,-1,0,3,10]
output1= [0,1,9,16,100]
input2= [-7,-3,2,3,11]
output2= [4,9,9,49,121]
const squaresAndSort = ary => ary.map( x => x**2)
.sort( (x,y)=>{return x-y})
const expect = (a,b) =>{ console.log(JSON.stringify(a)==JSON.stringify(b))}
expect(squaresAndSort(input1),output1)
expect(squaresAndSort(input2),output2)
設定前後兩根指針 (start,end)
取到的值取絕對值比大小,使用 unshift 把平方後的元素放進 result並移動指針
function squaresAndSort2(ary){
let start = 0
let end = ary.length-1
result = []
while(start<=end){
if( Math.abs(ary[start]) > Math.abs(ary[end]) ){
result.unshift(ary[start]**2)
start +=1
}else{
result.unshift(ary[end]**2)
end -= 1
}
}
return result
}
今天到此為止,有任何問題請在下方留言或透過email、GitHub聯絡我,感謝閱讀
Daily kitty