/**
 * 尝试获取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. Vue打包后放到服务器出现Loading chunk {n} failed 错误

    导航栏点击切换时 会出现Loading chunk {n} failed  ,刷新之后便不会出现.而且n在最新的build的文件中,n没有存在 偶然一次发现,项目更新迭代开发时上传测试环境后就会出现, ...

  2. centos7.0 可以访问HTML文件,不能访问PHP文件,因为php-fpm没有扩展包

    解决方法 :https://blog.csdn.net/ityang_/article/details/53980190 nginx调用PHP有sock方式和端口方式 1.确认nginx已经调用了ph ...

  3. springboot整合mybatis完整示例, mapper注解方式和xml配置文件方式实现(我们要优雅地编程)

    一.注解方式 pom <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId& ...

  4. 【codeforces 789A】Anastasia and pebbles

    [题目链接]:http://codeforces.com/contest/789/problem/A [题意] 有n种物品,每种物品有wi个; 你有两个口袋,每个口袋最多装k个物品; 且口袋里面只能装 ...

  5. Linux 内核kobject 层次, kset, 和子系统

    kobject 结构常常用来连接对象到一个层级的结构中, 匹配正被建模的子系统的结构. 有 2 个分开的机制对于这个连接: parent 指针和 ksets. 在结构 kobject 中的 paren ...

  6. tensorflow中models的安装

    tensorflow中models的安装参看网址: 1. Tensorflow Object Detection API Windows Install Guide http://www.insigh ...

  7. API自动化测试指南

    我相信自动化技能已经成为高级测试工程师总体技能的标配.敏捷和持续测试破坏了传统的测试自动化实践,导致测试工程师重新考虑自动化的完成方式.当今的自动化工程师需要在GUI的下方深入到API级别完成软件质量 ...

  8. Channel 9视频整理【5】

    Jennifer Chiu https://channel9.msdn.com/Niners/JenniferChiu

  9. C# string和String的区别

    string是String的别名,功能没什么区别.但是具体代码约束如下

  10. Perl中的bless的理解

    bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. [xywang@mnsdev13: ...