gpt4 book ai didi

javascript - 使用javascript执行数组交替排序的最佳算法?

转载 作者:行者123 更新时间:2023-12-03 07:03:37 25 4
gpt4 key购买 nike

以下是我的面试问题。但我无法破解它,甚至不知道如何完成它。

var arr = [1,4,5,8,3,2,6,9,7,10];

替代排序的预期输出:

[10,1,9,2,8,3,7,4,6,5]

我尝试过的:
我尝试切出 Math.max.apply(null,arr) 和 Math.min.apply(null,arr) 或者将其插入单独的空数组。但被告知该算法不是最优的。

最佳答案

我会对数组进行排序,然后迭代它,在每次迭代中从开头和结尾选取值(内循环计算的偏移量)。对奇数数组的最终检查将完成该过程。

let a = [1, 4, 5, 8, 3, 2, 6, 9, 7, 10];
a.sort((a, b) => a - b);
let b =[];

let l = a.length-1; // micro optimization
let L = l/2; // micro optimization
for(var i=0; i<L; i++) b.push( a[l-i] ,a[i] );
if(a.length%2) b.push( a[i] ); // add last item in odd arrays

console.log(b);

结果:

b =  [10, 1, 9, 2, 8, 3, 7, 4, 6, 5]

算法的好处:

  • 避免对原始数组进行更改(通过 popshift),可显着提高性能。
  • 在循环之前预先计算lL,可以避免在每次迭代中重复计算。
  • 在过程结束时进行单个条件检查来处理奇数数组,可以稍微提高速度。

I've prepared some PERFORMANCE TESTS, with some of the proposed algorithms : Original Array(10 items) and Big Array(1000 items)

关于javascript - 使用javascript执行数组交替排序的最佳算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50167036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com