/**
 * 尝试获取arr子集 y  使 x=Σy
 * @param {Array} arr 
 * @param {number} x 
 * @param {Array} res 
 */
function tryVisit(arr, x, res) {
   res = res || arr.map(m => { return { x: x - m, item: [m] } });
   ; ri < res.length; ri++) {
      const rr = res[ri];
      let toDel = true;
      ; i < arr.length; i++) {
         const item = arr[i];
         if (contains(rr.item, item)) continue;
         let diff = rr.x - item;
         ) { }
         ) {
            rr.item.push(item)
            rr.x = diff;
         }
         else {
            rr.item.push(item);
            console.log(rr.item.join(','))
            return rr.item;
         }
         toDel = false;
      }
      if (toDel) res[ri] = undefined;
      else res[ri] = rr;
   }
   let toVisit = res.filter(m => m != undefined);
   ) , toVisit)
}
/**
 * arr 中是否包含 tag
 * @param {Array} arr 
 * @param {*} tag 
 */
function contains(arr, tag) {
   ; j < arr.length; j++) {
      const r = arr[j];
      if (r == tag) {
         return true;
      }
   }
}
function main() {
   , , , , , , , , , ];
   ;
   //test
   console.log('test:每种方法都测试一下');
   tryVisit(tag, v) && tryVisit(tag.reverse(), v) && tryVisit(tag.sort((m,n) => m-n), v) && tryVisit(tag.sort((m,n) => n-m), v);
   //正序倒序、乱序、默认排序 等 多种尝试 比如 如果目标数是偶数 就按照奇数偶数排序试一下
   console.log('use:只取一个');
   , , , , , , , , , ];
   let res = tryVisit(tag, v) || tryVisit(tag.reverse(), v) || tryVisit(tag.sort((m,n) => m-n), v) || tryVisit(tag.sort((m,n) => n-m), v);
}
main();

理论上尝试次数越多函数失效的可能性越少,我列出了 排序不排序和他们的反转情况

/**
 * 尝试获取arr子集 y  使 x=Σy
 * @param {Array} arr 
 * @param {number} x 
 * @param {Array} res 
 */
function tryVisit(arr, x, res) {
   res = res || arr.map(m => { return { x: x - m, item: [m] } });
   ; ri < res.length; ri++) {
      const rr = res[ri];
      let toDel = true;
      ; i < arr.length; i++) {
         const item = arr[i];
         if (contains(rr.item, item)) continue;
         let diff = rr.x - item;
         ) { }
         ) {
            rr.item.push(item)
            rr.x = diff;
         }
         else {
            rr.item.push(item);
            console.log(rr.item.join(','))
            return rr.item;
         }
         toDel = false;
      }
      if (toDel) res[ri] = undefined;
      else res[ri] = rr;
   }
   let toVisit = res.filter(m => m != undefined);
   ) , toVisit)
}
/**
 * arr 中是否包含 tag
 * @param {Array} arr 
 * @param {*} tag 
 */
function contains(arr, tag) {
   ; j < arr.length; j++) {
      const r = arr[j];
      if (r == tag) {
         return true;
      }
   }
}
function main() {
   , , , , , , , , , ];
   ;
   //test
   console.log('test:每种方法都测试一下');
   tryVisit(tag, v) && tryVisit(tag.reverse(), v) && tryVisit(tag.sort((m,n) => m-n), v) && tryVisit(tag.sort((m,n) => n-m), v);
   //正序倒序、乱序、默认排序 等 多种尝试 比如 如果目标数是偶数 就按照奇数偶数排序试一下
   console.log('use:只取一个');
   , , , , , , , , , ];
   let res = tryVisit(tag, v) || tryVisit(tag.reverse(), v) || tryVisit(tag.sort((m,n) => m-n), v) || tryVisit(tag.sort((m,n) => n-m), v);
}
main();

从数组中取出n个不同的数组成子集 y 使 x = Σy的更多相关文章

  1. 从数组中取出N个元素的所有组合——递归实现

    https://www.cnblogs.com/null00/archive/2012/04/27/2473788.html 今天在做POJ 1753时,需要枚举一个数组中所有组合.之前也遇到过类似的 ...

  2. PHP 数组中取出随机取出指定数量子值集

    #关键:array_rand() 函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组.#思路:先使用array_rand()随机取出所需数量键名,然后将这些键名指向 ...

  3. js随机从数组中取出几个元素

    JS如何从一个数组中随机取出一个元素或者几个元素. 假如数组为 var items = ['1','2','4','5','6','7','8','9','10']; 1.从数组items中随机取出一 ...

  4. java数组中取出最大值

    class Demo{ public static void main(String []args){ int[] arr={3,54,456,342,2798}; int max=getMax(ar ...

  5. php从数组中取出一段 之 array_slice

    array array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] ) array_slic ...

  6. js从数组中取出n个不重复的数据

    /** * 首先,针对这个数组做一个去重处理,避免你在后面取数据的时候,因为取到相同的元素而又要多去取一次随机数 * 将获取到的不重复的数组,再到这里样本里面去取随机数 * 每取到一次,就将这个元素从 ...

  7. reduce计算数组中每个元素出现的次数 数组去重的几种方式 将多维数组转化为一维

    // js计算数组中每个元素出现的次数 // var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; // var countedNames = ...

  8. Js数组对象的属性值升序排序,并指定数组中的某个对象移动到数组的最前面

    需求整理: 本篇文章主要实现的是将一个数组的中对象的属性值通过升序的方式排序,然后能够让程序可以指定对应的数组对象移动到程序的最前面. 数组如下所示: var arrayData= [{name: & ...

  9. C#索引器:在集合或数组中取出某一个元素 举例 _【转】

    Garmmar: [访问修饰符] 数据类型 this[参数列表] { get { 获取索引器的内容 } set { 设置索引器的内容 } } Eg: <span style="font ...

随机推荐

  1. tensorflow学习笔记(四十五):sess.run(tf.global_variables_initializer()) 做了什么?

    当我们训练自己的神经网络的时候,无一例外的就是都会加上一句 sess.run(tf.global_variables_initializer()) ,这行代码的官方解释是 初始化模型的参数.那么,它到 ...

  2. Javassist指引(一)

    目录 原文链接 1. 读写字节码 1.1概述 Javassist是一个Java字节码类库.Java的字节码是包含Java类与接口,并按照一定的顺序存在class文件中. Javassist.CtCla ...

  3. Capistrano:自动完成多台服务器上新版本的同步更新,包括数据库的改变

    https://baike.baidu.com/item/Capistrano/6844928?fr=aladdin   Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署we ...

  4. P1017 聪聪排数字

    题目描述 今天聪聪收到了n张卡片,他需要给他们从小到大排序. 输入格式 输入的第一行包含一个整数 \(n(1 \le n \le 10^3)\) . 输入的第二行包含 \(n\) 个正整数,以空格间隔 ...

  5. Python3使用过程中需要注意的点

    命名规则 变量 变量名只能是数字.字母或下划线的任意组合 变量名的第一个字符不能是数字 不能使用关键字作为变量名 变量的定义要具有可描述性 变量名不宜过长.不宜使用中文.拼音 常量(常用在配置文件中) ...

  6. 用C++获取屏幕上某点的颜色

    假定坐标点 x=50,y=50. 输出 RGB 用 16 进制数.Afxwin.h 你建项目时可得.#include <Afxwin.h>#include <Windows.h> ...

  7. 2018-8-13-WPF-使用-Edge-浏览器

    title author date CreateTime categories WPF 使用 Edge 浏览器 lindexi 2018-8-13 15:33:5 +0800 2018-06-01 1 ...

  8. How to fix nuget Unrecognized license type MIT when pack

    When I packaging license within the nupkg, I will using License to replace licentUrl. I using this c ...

  9. sql临时表与变量表

    1)临时表存储在 tempdb 中,当不再使用时会自动删除 一般使用如下: --创建临时表 select * into #temp from TABLE --使用临时表 select * from # ...

  10. C++模板特化与偏特化

    C++模板 说到C++模板特化与偏特化,就不得不简要的先说说C++中的模板.我们都知道,强类型的程序设计迫使我们为逻辑结构相同而具体数据类型不同的对象编写模式一致的代码,而无法抽取其中的共性,这样显然 ...