08.07.2017, 11:51
|
|
Профессор
|
|
Регистрация: 08.08.2014
Сообщений: 261
|
|
Требуется 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, 08.07.2017 в 11:53.
|
|
08.07.2017, 12:26
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
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>
|
|
08.07.2017, 17:31
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
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, 08.07.2017 в 18:37.
|
|
08.07.2017, 17:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сообщение от j0hnik
|
reverse()
|
|
|
08.07.2017, 17:54
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
рони, опишите подробней ваши сомнения
|
|
08.07.2017, 18:00
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
j0hnik,
зачем лишнее reverse? может подумать и сделать без него?
|
|
08.07.2017, 18:31
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от j0hnik
|
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);
|
Рони спасибо, поправил
|
|
08.07.2017, 18:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
j0hnik,
|
|
09.07.2017, 09:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
минимальный подмассив с максимальной суммой больше определённого числа
<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>
Последний раз редактировалось рони, 09.07.2017 в 09:56.
|
|
13.07.2017, 00:08
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
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);
Листал справочник. вспомнил эту тему =)
Последний раз редактировалось j0hnik, 13.07.2017 в 01:35.
|
|
|
|