/**
 * 尝试获取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. 在vuex的mutations中使用vue的小技巧

    问题: 在vuex组件中的mutations属性中的定义的函数,有时会要用到vue这个对象.正常在其他的地方使用是通过this这个变量来获取,但是在mutations定义的函数中this指定的是Vue ...

  2. es6—变量的解构赋值

    数组的解构赋值 ]]]]]]] = []}} = {}} = {}})]: first]: last} = arr} = {}) {}))}))}) {}))}))].]]]])})] }}} = { ...

  3. P1066 汪老师玩卡片

    题目描述 汪老师得到了一些卡片,这些卡片上标有数字0或5.现在他可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被90整除这个条件.同时这个数不能含有前导0,即0不能作为这串数的首 ...

  4. 2018-8-10-win10-uwp-绘图--Line-控件使用

    title author date CreateTime categories win10 uwp 绘图 Line 控件使用 lindexi 2018-08-10 19:16:51 +0800 201 ...

  5. H3C STP基本配置

  6. get_free_page 和其友

    如果一个模块需要分配大块的内存, 它常常最好是使用一个面向页的技术. 请求整个页也 有其他的优点, 这个在 15 章介绍. 为分配页, 下列函数可用: get_zeroed_page(unsigned ...

  7. Linux内存页大小

    当使用内存时, 记住一个内存页是 PAGE_SIZE 字节, 不是 4KB. 假定页大小是 4KB 并且 硬编码这个值是一个 PC 程序员常见的错误, 相反, 被支持的平台显示页大小从 4 KB 到 ...

  8. logisim自动生成电路

    之前再做有关logisim有关的实验时,一直在傻乎乎地连线,而我是看了mooc有关的视频时,才知道logisim有自动连线的功能. 自动连线需要事先知道输入与输出的真值表或者全部的表达式,将其填入lo ...

  9. 关于QT中的隐式共享

    网上关于隐式共享的解释很多,在此不再陈述.本文主要是记录一下自己学习隐式共享的坑点: 即:隐式共享只发生在非指针的情况下!!!! 如下代码: QImage image1; QImage image2; ...

  10. 如何修改eclipse中Dynamic web module的 version

    我们直接在eclipse中修改Dynamic Web Module的话会报错,改不了的 所以我们可以找到项目文件中的.setting文件下的org.eclipse.wst.common.project ...