在数组中查找可能的加法组合
Find Possible addition combinations in array
解决此问题的最佳方法是什么?我不知道该怎么开始。这不是家庭作业问题,而是面试练习。
"使用JavaScript语言,让函数ArrayAddition(arr)获取存储在arr中的数字数组,如果数组中的任何数字组合加起来可以等于数组中的最大数字,则返回字符串true,否则返回字符串false。例如:如果arr包含[4,6,23,10,1,3],则输出应返回true,因为4+6+10+3=23。数组不会为空,不会包含所有相同的元素,并且可能包含负数。'
http://coderbyte.com/CodingArea/GuestEditor.php?ct=Array%20Addition&lan=JavaScript
试试这个解决方案。对于这个代码,我使用这个参考github
<script type="text/javascript">
var bol=false
var arr=[4, 6, 23, 10, 1, 3]
var maxx=Math.max.apply(Math, arr);
var index = arr.indexOf(maxx);
arr.splice(index, 1);
function k_combinations(set, k) {
var i, j, combs, head, tailcombs;
if (k > set.length || k <= 0) {
return [];
}
if (k == set.length) {
return [set];
}
if (k == 1) {
combs = [];
for (i = 0; i < set.length; i++) {
combs.push([set[i]]);
}
return combs;
}
combs = [];
for (i = 0; i < set.length - k + 1; i++) {
head = set.slice(i, i+1);
tailcombs = k_combinations(set.slice(i + 1), k - 1);
for (j = 0; j < tailcombs.length; j++) {
combs.push(head.concat(tailcombs[j]));
}
}
return combs;
}
function combinations(set) {
var k, i, combs, k_combs;
combs = [];
for (k = 1; k <= set.length; k++) {
k_combs = k_combinations(set, k);
for (i = 0; i < k_combs.length; i++) {
combs.push(k_combs[i]);
}
}
return combs;
}
var result=combinations(arr)
for(z=0;z<result.length;z++){
var tot=0
for(c=0;c<result[z].length;c++){
tot+=result[z][c]
}
if(tot===maxx){bol=true}
}
console.log(bol)
</script>
如果这个解决方案不适合您的需要,我很抱歉让您浪费时间。
试试这个解决方案。对于组合代码,我使用了这个参考github
<script>
function algorithem() {
var arr = [4, 6, 23, 10, 1, 3];
arr.sort(function(a,b) { return a-b } );
var largest = arr[arr.length-1];
arr.pop();
function combinations(set) {
return (function acc(xs, set) {
var x = xs[0];
if(typeof x === "undefined")
return set;
for(var i = 0, l = set.length; i < l; ++i)
set.push(set[i].concat(x));
return acc(xs.slice(1), set);
})(set, [[]]).slice(1);
};
function add(arr) {
var sum = 0;
var len = arr.length;
for( var j=0;j<len;j++){
var p = arr[j];
for(var i=0,sum=0; i<p.length;i++){
sum += p[i];
if(largest == sum){
return true;
}
}
};
if( j == len){return false;}
}
add(combinations(arr));
};
</script>
相关文章:
- 根据id将json数组组合为一个json数组
- jqueryeasyui使用子数组组合数据
- javascript数组中条目的成对组合
- 将数组中的所有数字组合相加
- JavaScript算法,提供每种可能的项目组合,并将它们存储在数组中
- 将两个数组合并为一个具有键值关系的数组
- 如何将数组的对象与同一索引组合
- 将对象隐藏到组合/对象数组
- 为什么我的jQuery.map不能在这里组合我的数组
- 组合/匹配数组
- Javascript数组添加 - 所有组合
- 使用具有特定条件的 lodash 添加和组合对象数组中的重复项
- 将数组组合到一个对象中
- Javascript将JSON放入数组中,组合并在其他地方使用
- 在 JavaScript 对象中组合来自不同属性的数组项
- JavaScript for in - 从主对象获取、组合和处理数组
- 在数组中的一组标识符中组合 2 个值
- 组合 JavaScript 数组
- 在 JavaScript 中组合两个字符串数组
- 使用数组和对象的组合循环访问数据