javascript - 从数组中获取元素,其加起来的值大于给定值 JavaScript
问题描述
我最近刚开始学习 JavaScript 以提高我的技能,但遇到了一个让我偏离轨道的挑战。
我有一组值,我需要在数组中找到其中的元素,这些元素加起来会给出一个大于单个值集的数字。例如
[50, 100, 400, 800] 的数组
如果我有一个值说 50 它应该返回 50 因为 50 在列表中。这很好,但是如果我有一个 421 的值,它应该返回 [400, 50] 或者如果我有一个 1751 的值,它应该返回 [800, 800, 100, 50, 50] 作为加起来的值给出接近给定值的最小值。
我尝试了以下方法:
- 我对数组值进行了排序
- 检查数组是否包含给定值,如果是,则在新数组中返回该值
- 如果一个值小于最小值且大于下一个值,则返回下一个值,我尝试研究 reduce 方法,但我无法理解它,请提供一些专业知识。
以下是我的代码
const ItemSize = [50, 100, 400, 800]
function getItemSize(itemSize, n) {
const sortedItemSizes = ItemSize.sort(function compare(a, b) {
return a - b;
});
let item = [];
if (sortedItemSizes.includes(n)) {
item.push(n);
} else if (n > Math.min.apply(Math, sortedItemSizes) && n < sortedItemSizes[1]) {
item.push(sortedItemSizes[1]);
}
return item;
}
console.log(
getItemSize(ItemSize, 50)
)
解决方案
你可以:
- 按降序对数组进行排序
- 逐个元素,检查它是否可以多次添加到解决方案中。
- 返回结果数组
const arr = [50, 100, 800, 400];
function findSet(arr, sum) {
const sorted = arr.sort((a, b) => a < b ? 1 : -1);
const res = [];
sorted.forEach(n => {
while(n <= sum) {
sum -= n;
res.push(n);
}
});
return res;
}
console.log(findSet(arr, 51));
console.log(findSet(arr, 100));
console.log(findSet(arr, 150));
console.log(findSet(arr, 1751));
推荐阅读
- python - 无法获取给出错误结果的网页
- python - 如何获取python导入树
- vb.net - 获取 System.IO.IOException
- c# - 绑定数据网格按钮 mvvm
- css - CSS3 @keyframes 动画在 Firefox 阴影 DOM 中不起作用
- android-layout - 白色在工具栏中不可见
- git - 在 PowerShell 中将 curl REST 调用转换为 Invoke-RestMethod
- node.js - Gulp-concat 根本不起作用 - 编写所有基本文件而不是一个
- r - ggplot r:如何突出显示一年中的数据
- android - 如何在单按钮视图android中对齐两端(左和右)的两个文本