Требуется code review
Задача: Массив [2, 5, 9, 11, 1, 2, 4]
X = 12 Найти подмассив, сумма элементов которого больше X, а количество элементов минимально возможное Решение: const find = (target, data, resultMas = [], sum = 0) => { // случай если сумма чисел меньше target if (!data.length) { console.error('max value:!', sum); return } const maxNum = Math.max.apply(Math, data); const index = data.indexOf(maxNum); resultMas.push(maxNum); sum = resultMas.reduce((prev, next) => prev + next); const test = sum > target; if (test) { return resultMas } else { data.splice(index, 1); return find(target, data, resultMas, sum); } }; пример Решение громоздкое, если есть варианты отпишите |
DynkanMaclaud,
<script> function fn(a, b) { a = a.slice(0).sort(function(a, b) { return b - a }).filter(function(a) { var c = 0 < b; b -= a; return 0 < c }); return 0 < b ? !1 : a }; document.write(JSON.stringify(fn([2, 5, 9, 11, 1, 2, 4],12))); </script> |
var arr = [2, 5, 9, 11, 1, 2, 4], x = 12; arr.sort((a, b)=> b-a).reduce((sum, el, i) => { if (sum > x) arr.length = i; if (sum < x && i==arr.length-1) arr = false; // если все же X больше return sum + el; }); alert(arr); |
Цитата:
|
рони, опишите подробней ваши сомнения
|
j0hnik,
зачем лишнее reverse? может подумать и сделать без него? |
Цитата:
|
j0hnik,
:dance: |
минимальный подмассив с максимальной суммой больше определённого числа
:write:
<script> function fn(a, c) { a = a.slice(0).sort(function(a, b) { return b - a }); for (var b = 0; b < a.length; b++) { if (c < a[b]) return a.slice(0, ++b); c -= a[b] } return !1 }; document.write(JSON.stringify(fn([2, 5, 9, 11, 1, 2, 4],12))); </script> |
var arr = [2, 5, 9, 11, 1, 2, 4], x = 12, sum = 0; arr.length = arr.sort((a, b)=> b-a).findIndex((el) => (sum += el) > x )+1; if(!arr.length) arr = false; alert(arr); Листал справочник. вспомнил эту тему =) |
Часовой пояс GMT +3, время: 23:49. |