例如,如果我有这个数组:
var input = [1,1,2,4,6,7,7,1];
我希望输出类似于:
[1,2,1,4,6,7,1,7]
新阵列的顺序无关紧要,只要相似的项目永远不会(或至少尽可能少)彼此相邻。
我可以使用纯JavaScript以及underscore.js。
答案 0 :(得分:1)
尝试以下方法:
var input = [1,1,2,4,6,7,7,1];
input.sort()
var output = [];
var len = input.length;
for (var i = 0; i < Math.floor((len / 2)); i++) {
output.push(input[i]);
output.push(input[len - i - 1]);
}
if (len % 2) {
var left_over = input[Math.floor(len / 2)];
if (left_over == output[0]) {
output.push(left_over);
} else {
output.unshift(left_over);
}
}
或者查看http://jsfiddle.net/d0j3Lfa3/1。
解决方案对数字进行排序,然后交替显示高位和低位。它处理奇数个元素,包括[1,1,2]和[1,2,2]等极端情况,它需要以不同的方式推动中间元素传递。由于输入已排序,因此输入顺序不会影响输出。
This answer可能有助于简化一些事情。