“笨”方法

(()=>{

console.clear();

let arrs = [102, 233, 45, 350, 130, 220, 195, 240].sort((a,b)=>a - b);

console.log(arrs, arrs.reduce((a,b)=>a + b, 0));

// 笨方法,穷举,不过在穷举时淘汰了一些值。全穷举需要跑256次,加上阀值了需要196次

var divideRes = divide(arrs);

console.log(divideRes, divideRes.reduce((a,b)=>a + b, 0));

function divide(array) {

var total = array.reduce((a,b)=>a + b, 0);

var half = total / 2;

var min = total;

var result = [];

var counter = 0;

for (let comb of fullCombination(array, half)) {

var sum = comb.reduce((a,b)=>a + b, 0);

if (sum > half && sum < min) {

min = sum;

result = comb.slice();

}

counter += 1;

}

// console.log(counter);

return result;

}

function *fullCombination(array, threshold) {

function *gen(array, prefix) {

if (array.length === 0) {

yield prefix;

} else {

if (prefix.reduce((a,b)=>a + b, 0) < threshold) {

yield*gen(array.slice(1), [...prefix, array[0]]);

yield*gen(array.slice(1), [...prefix]);

}

}

}

yield*gen(array, []);

}

}

)();

补充一个背包的解法,支持一下@冯恒智

var res = knapsack([102, 233, 45, 350, 130, 220, 195, 240].map(i=>({w: i,b: i})), ([102, 233, 45, 350, 130, 220, 195, 240].reduce((a,b)=>a + b, 0) / 2) << 0);

js 数组按奇偶拆分_js数组拆分问题相关推荐

  1. js array 删除指定元素_JS数组

    JS其实没有真正的数组,只是用对象模拟数组 创建一个数组 Array.from可以将不是数组的尝试变成数组 只会在符合条件下才能转化成功:该对象有0,1,2,3这种下标和length属性 伪数组:如果 ...

  2. c语言指针数组元素奇偶排列,关于数组奇偶调序问题的总结

    数组的奇偶调序问题,主要考察的是对数组下标或者数组指针的灵活操作."双下标"策略或者"双指针"策略是屡试不爽的一个方案. 奇偶调序无非有两大类情况:奇偶边排,奇 ...

  3. js数组查找最接近_js 数组快速查询指定字符串方法

    有一个动态数组,[adfjsf,ad2fjsf,adf32jsf,ad4fjsf,ad523fjsf,a523dfjsf,ad423fjsf,adfjs234f,......] 我想查查数组是否有ab ...

  4. JAVA数组扁平化整合_JS数组扁平化(flat)方法总结详解

    需求:多维数组=>一维数组 let ary = [1, [2, [3, [4, 5]]], 6]; let str = JSON.stringify(ary); 第0种处理:直接的调用 arr_ ...

  5. java数组元素替换操作_js数组操作(添加、删除、替换元素)

    1.添加元素 函数:push(para),参数说明para要添加的元素 示例: var lang = ["php","java","javascrip ...

  6. js 数组按奇偶拆分_力扣:按奇偶排序数组js

    给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素. 你可以返回满足此条件的任何数组作为答案. 示例: 输入:[3,1,2,4] 输出:[2,4,3,1] 输 ...

  7. js用递归遍历多维数组_js面试题更新之40

    1.数组方法pop() push() unshift() shift() push     后面添加元素,个数不限,返回新数组的长度 pop     从后面删除一个元素,返回那个元素 unshift ...

  8. Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组、split函数垂直拆分二维numpy数组

    Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组.split函数垂直拆分二维numpy数组 目录

  9. Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组

    Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组.split函数水平(按列)拆分二维numpy数组 目 ...

最新文章

  1. 二、如何保存MNIST数据集中train和test的图片?
  2. 【JUC系列】Future异步回调模式
  3. Python学习笔记----try...except...else
  4. springdata jpa单表操作crud
  5. 【POJ16553107】树的重心——点分治的准备
  6. Java foreach
  7. python 爬取了租房数据
  8. 据说学会这款数据分析工具,会被各大名企高薪哄抢
  9. [渝粤教育] 重庆工程职业技术学院 Linux服务器配置与管理(唐宏) 参考 资料
  10. 深入理解Yii2.0(1) 属性
  11. 基于springboot的民办职业学校缴费系统
  12. eclipse、EditPlus等编辑器选中列(块)的方法
  13. TMDB电影数据分析
  14. xp关闭计算机共享,关闭Windows XP系统默认共享四种方法
  15. 手把手接入高德地图API——POI周边搜索功能实现
  16. [视觉Slam十四讲(2)踩坑记录]第3讲:Fatal error :Eigen/core没有那个文件或目录
  17. 【Android】图形图像处理
  18. 输出100以内不能被7整除的数
  19. 软件开发过程反思——从需求分析到最后开发出来的软件
  20. AHBA| 如何建立Null模型控制富集分析中的假阳性偏差

热门文章

  1. java我的世界填充方块,我的世界怎么快速填充方块-快速填充方块攻略
  2. 小组取什么名字好_有创意的小组名有哪些
  3. 段码超低功耗LCD液晶显示驱动芯片(IC)-VKL系列-VKL128/060/076/144A/144B,VKL144A兼容MCP144
  4. here-document at line y delimited by end-of-file
  5. hdfs 元数据维护机制
  6. 大数据开发之Hive篇14-Hive归档(Archiving)
  7. Git - 强制覆盖本地代码[与远程仓库保持一致]
  8. jbox弹窗_强大的jquery弹出层插件jBox
  9. java通过poi导出excel和pdf
  10. 关于物联网时代的工控安全