2016-02-19 81 views
0

我有大量数字需要分配到x个数字范围内,以便每个范围都包含与原始数组相同数量的元素。将数组数组分成x个子集

例如,当x = 4,下面的阵列

[1, 1, 2.5, 3, 6, 7, 10, 11.2, 14, 25, 35, 50, 75, 85.5, 100, 120, 128.9, 150, 200, 260] 

会产生长度x + 1具有以下

[1, 6.5, 30, 110, 260] 
  • 1数组是阵列中的最低值
  • 6.5是6和7的中点
  • 30是25的中点和35
  • 110的100的中点和120
  • 260的最高值

本质上讲,这会给我4个范围的数字1-6.5的,6.5- 30,30-110和110-260。每个范围将包含5个原始数组的数字。

需要能够处理动态数量的元素,这些元素不一定会被x均分。

我问this question on Mathematics,但被告知这是更多的编程问题。

+0

这确实是一个你可以用程序解决的问题,但对于这个网站来说这太简单了。回答这个问题的唯一方法就是为你做这项工作,这里没有人会这样做。如果您有兴趣了解如何为此用例创建基本的JavaScript函数,请查看For循环的工作原理以及非常基本的Math.floor和Array.push方法。 – gravityplanx

+0

@Ryan:你到目前为止使用JavaScript尝试过哪些代码? – stark

+0

如果'x'不能分割数组的长度会怎么样? – Oriol

回答

1

基于你的问题,下面的JavaScript代码应该满足你的要求,我用x的一些值测试了它的正确性,但是你可能想要检查这个代码是否适用于你的问题的所有可能的测试用例。

var arr = [1, 1, 2.5, 3, 6, 7, 10, 11.2, 14, 25, 35, 50, 75, 85.5, 100, 120, 128.9, 150, 200, 260, 261, 262, 263, 264, 265]; 
 
total_elem = arr.length; 
 
var x = 5; 
 
var each_set_elem = total_elem/x; 
 
var i = 1; 
 
var temp = []; 
 
temp.push(arr[0]); 
 
for (i = each_set_elem; i < total_elem; i += each_set_elem) { 
 
    this_elem = (arr[i] + arr[i - 1])/2; 
 
    temp.push(this_elem); 
 
} 
 
temp.push(arr[total_elem - 1]); 
 
console.log(temp);

此代码满足所述问题测试用例以及对于x = 5它吐出正确6点,使得各5米范围具有从给定的阵列组4种元素。

+0

这会处理输入数组中的奇数个元素吗?因为我需要它是动态的。 –

+0

@RyanDantzler:是的,只要你可以在所需的范围内将元素的总数分成相应的元素集,就可以用于具有奇数元素的数组,例如。将25个元素分成5个元素,每个元素包含5个元素,检查我更新后的代码片段,我用25个元素和x = 5显示了奇数编号的情况。 – stark

+0

我的意思是,它需要能够处理许多不会被x精确分割的元素。 –