javascript - 基于类似二叉搜索树的算法拟合数组
问题描述
我有一个这样的日期排序数组:
let arr = ['2019-03-12', '2019-02-11', '2019-02-09', '2018-06-09', '2018-01-24', ..]
这arr
是长度100,000,因此要求基于二叉搜索树过滤此数组(出于性能考虑)。但我不明白怎么做?因为二叉搜索树返回一个确切的值,但我想返回包括 2018 在内的所有值,例如。
任何线索我该如何实施?
解决方案
正如您所提到的, abinary search
将从集合中为您提供一个值。在这种情况下,您可以简单地做的是,您可以拼接从您返回的值binary search
并重复,直到没有包含 2018 的元素。
splice() 方法在数组中添加/删除项目,并返回删除的项目。
当然,您需要存储返回的值。
let arr = ['2019-03-12', '2019-02-11', '2019-02-09', '2018-06-09', '2018-01-24', '2018-01-24'];
arr.sort();
let filteredArr = [];
let result = 0;
while (result !== -1) {
result = bSearch(arr, '2018');
if (result !== -1) {
filteredArr.push(arr[result]);
arr.splice(result, 1);
}
}
// Your filtered array
console.log(filteredArr)
function bSearch(arr, x) {
let start=0, end=arr.length-1;
while (start <= end){
let mid = Math.floor((start + end) / 2);
// If element is present at mid, return index
if (arr[mid].substring(0,4) === (x)) return mid;
else if (arr[mid] < x)
start = mid + 1;
else
end = mid - 1;
}
return -1;
}
推荐阅读
- spring - 为什么推荐spring bean的接口?
- angularjs - 使用 angularjs 登录到 Domino 服务器不返回 DomAuthSessId
- python - 通过使用另一个值列表中的值,询问用户要更新多少值并更新字典中的那么多值
- python - Sklearn 在线预测,batch vs one by one
- python - 如何在pyspark中重命名数据框的列名?
- telegram - 如何检查机器人网址是否仅在电报的应用浏览器中打开
- ios - 如何在 UITableViewCell 目标 c 中添加复选框按钮
- sql - 使用 ROWNUM Oracle 选择第 n 行
- apache-camel - 使用包含日期范围的 sql 的骆驼端点 URI
- php - Symfony - Doctrine Single Table Inheritance ManyToOne 与父实体的关联