/**
 * 尝试获取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. JPA进行insert操作时会首先select吗

    在某个项目中,使用JPA的saveAll方法去批量写入数据时,通过打印sql,发现每次insert前都会先select一次,极大的浪费了写入性能. 分析一下代码,saveAll() @Transact ...

  2. Springboot 自定义多个404页面

    在Springboot中,可以通过修改配置.或者在static文件夹下添加error文件夹引入个性化的404模版.但是如果需要针对不同url地址规则,返回不同样式的404页面,则难以实现了.针对这个问 ...

  3. 高级教程: 作出动态决策和 Bi-LSTM CRF 重点

    动态 VS 静态深度学习工具集 Pytorch 是一个 动态 神经网络工具包. 另一个动态工具包的例子是 Dynet (我之所以提这个是因为使用 Pytorch 和 Dynet 是十分类似的. 如果你 ...

  4. tf.contrib.layers.xavier_initializer

    https://blog.csdn.net/yinruiyang94/article/details/78354257xavier_initializer( uniform=True, seed=No ...

  5. svn 删除、移动和改名

    删除.移动和改名 Subversion allows renaming and moving of files and folders. So there are menu entries for d ...

  6. 洛谷 P1972"[SDOI2009]HH的项链"(离线+树状数组 or 在线+主席树)

    传送门 •题意 给你一个包含 n 个数的数组 $a$: 有 m 此操作,每次操作求区间 [l,r] 中不同数的个数: •题解(离线+树状数组) 以样例 $[1,2,3,4,3,5]$ 为例,求解区间 ...

  7. 原 在windows上创建文件名以“.”开头的文件

    在实际项目开发中,我们会经常遇到以”.”开头的配置文件.例如我们如果需要通过配置文件给npm更换源就需要更改.npmrc文件,然而还有很多友友还不清楚如何创建一个类似的文件,今天就和大家分享下这个小技 ...

  8. H3C IP地址动态获取过程

  9. linux平台依赖性

    每个电脑平台有其自己的特点, 内核设计者可以自由使用所有的特性来获得更好的性能. in the target object file ??? 不象应用程序开发者, 他们必须和预编译的库一起连接他们的代 ...

  10. springboot+nginx+https+linux实现负载均衡加域名访问简单测试

    把springboot项目打包成三个jar包,并指定端口为 14341,14342,14343 下载腾讯云免费ssl证书,解压后会出现如下图文件夹 把nginx文件夹下的 .crt 和 .key文件复 ...