查找排序数组值之间的最大差异
finding the biggest difference between sorted array values
我有一个像这样的数组…
var array = array(1,4,7,8,12,15);
数组中的值将始终是整数,并且总是递增,或者可以与前一个相同,但至少不会变小。
现在我想循环遍历数组并找出哪个"步骤"之间的最大差异,所以在我的例子中,这将是数组键4&5,因为从8-12 == 4…但也有可能这将是具有相同值的多个步骤,假设我的数组是这个。
var array = array(1,5,7,8,12,15);
则为0&1和4&5....
我正在寻找一个函数,可以返回我这个…哦,必须是纯果汁……
我希望有人能帮助我。
我不确定你到底想要什么。但是如果你想要最大的跳跃:
var max=0;
for (i=1; i<array.length; i++)
max = Math.max(max,array[i]-array[i-1]);
如果您想要最大跳变发生的第一个位置:
var max=0;
var firstLoc=0;
for (i=1; i<array.length; i++)
{
curJump = array[i]-array[i-1];
if (curJump > max)
{
firstLoc = i;
max = curJump;
}
}
如果您想要此跳转发生的最后位置:
var max=0;
var lastLoc=0;
for (i=1; i<array.length; i++)
{
curJump = array[i]-array[i-1];
if (curJump >= max)
{
lastLoc = i;
max = curJump;
}
}
如果你想要一个包含发生最大跳跃的所有位置的数组:
var max=0;
var locs = [];
for (i=1; i<array.length; i++)
{
curJump = array[i]-array[i-1];
if (curJump == max)
{
locs.push(i);
} else if (curJump > max)
{
locs = [i];
max = curJump;
}
}
函数式方法使用简单的纯函数和内置函数来完成一些繁重的工作:
var array = Array(1,5,7,8,12,15);
//get differences:
var diffs=array.map(function(a,b,c){
return a - (c[b-1]||0);
},{});
//find max diff and collect elements:
var rez=diffs.map(function(a,b){return a==this && [b-1, b]; },
Math.max.apply(0, diffs)
).filter(Boolean);
//display the findings:
alert(rez.join("|")) //shows: 0,1|3,4
当我完成的时候,我总是很惊讶,我没有看到任何本地变量或条件被使用…
蛮力解决方案是按顺序遍历数组,并查看从a[i]到[i+1]的差异。如果大于max,则将max设置为此值。
也可以使用二进制搜索,因为数组是排序的。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用 jqueryui 的多个可排序列表 - 不希望项目在列表组之间混合
- jQuery可排序与溢出:隐藏;在两个列表之间
- 如何在 2 个角度 UI 网格之间同步列排序
- 基于两列之间的计算对jquery数据表进行排序
- Jquery UI可排序小部件在可排序项之间具有分隔符
- 如何使文本在JQueryUI可排序项之间动态显示
- 如何附加列表项<李>从无序列表<ul>其他四个未排序列表之间
- 为什么这种排序算法会在浏览器之间产生不一致的结果
- 在jQueryUI可排序的表之间移动一列,包括th
- jQuery可排序-用双击在列表之间移动元素
- 谷歌位置Api找到附近的位置与当前位置和附近位置之间的距离排序
- 排序函数不能在升序和降序之间切换
- Jquery排序禁用特定项之间的拖放
- jQuery可在不同无序列表之间进行排序
- 拖放2个表之间使用Jquery排序与rowspan和colspan
- jQuery UI可排序和在列表之间移动元素
- Jquery可在父框架和子框架之间排序和拖动
- 使用同位素.js在升序和降序之间切换排序