arrays - 将数字数组拆分为具有接近值的几个部分
问题描述
示例数组:
[
1, 2, 3, 10, 11, 12, 13, 14, 20, 21, 22, 30
]
我需要将它分成三个具有接近值的部分
[1, 2, 3]
[10, 11, 12, 13, 14]
[20, 21, 22, 30]
解决方案
由于源数组中的所有值都已经排序,这使得它变得非常容易。
在您的示例中,我会说有 3 个解决方案。
solution 1: [1, 2, 3]
solution 2: [10, 11, 12, 13, 14]
solution 3: [20, 21, 22, 30]
每个解决方案都是一个数组。我们将使用另一个数组来包含所有这些解决方案。除非您的源数组为空,否则您将至少有 1 个包含至少 1 个值的解决方案。
从源中获取第一个值并开始创建解决方案 1。现在循环遍历源中的剩余值。如果下一个值与当前解决方案中添加的最新值连续,则将其添加到该解决方案集中。如果没有,请开始创建新的解决方案。
source = [1, 2, 3, 10, 11, 12, 13, 14, 20, 21, 22, 30];
solutions = new Array(1);
index = 0;
solutions[index] = new Array();
solutions[index].push(source[0]);
j = 0;
for (i = 1; i < source.length; i++){
if (solutions[index][j]+1 == source[i]){
solutions[index].push(source[i]);
j++
}else{
solutions.push(new Array());
index++;
solutions[index].push(source[i]);
j = 0;
}
}
console.log(solutions);
推荐阅读
- bash - 用于运行 dotnet 命令行应用程序的 Bash 脚本将 ' 作为 cli 参数
- c# - Dapper 映射问题
- c# - .xmla 使用 C# 部署到 SQL
- python - Keras 双向 LSTM:传递了与 `cell.state_size 不兼容的初始状态`
- python - PXSSH 截断发送到远程服务器的命令
- excel - 通过字符串中的前几个字母进行条件格式[VBA]
- excel - 如何判断多个“IFS”条件是否为“TRUE”,而不仅仅是第一个匹配?
- node.js - 错误:无法读取配置文件 newrelic.js
- drupal-8 - 需要帮助从 Drupal 8 中删除规范的 rel 链接
- android-fragments - AndroidX Fragment recyclerview 出现在我的工具栏上,我需要 recyclerview 在工具栏下滚动