从数组中取出n个不同的数组成子集 y 使 x = Σy
2024-10-20 01:27:10
/**
* 尝试获取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();
最新文章
- XStream xml 解析框架使用笔记
- 视频演示eworkflow集成定制aspx页面的过程
- 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
- Mac下同时安装多个版本的JDK
- Python正则表达式模块(re模块)
- 历代诗词咏宁夏注释3----蔡升元:<;题大清渠>;
- cdoj 71 I am Lord Voldemort 水题
- Mysql数据库中的计数器表实时更新
- iOS 构造方法
- ThinkPHP函数详解:cookie方法
- Codevs 3990 中国余数定理 2
- mybatis入门,基本案例和xml讲解
- Windows 端口和任务 查看 相关命令
- java的大数类
- 跨服务器查询sql (摘要)
- CentOS 下网络报错 Device eth0 does not seem to be present
- PHP 领域逻辑与数据库映射
- python之pygal:掷两个不同的骰子并统计大小出现次数
- [转] 在 Windows 中让任务栏时间显示&ldquo;秒&rdquo;
- word2vec 的理解
热门文章
- maven环境隔离
- 2018-8-10-C#-代码占用的空间
- Python--day36--操作系统的作用;多道技术;
- async和await的执行顺序问题
- H3C生成树的不足
- Linux 内核 usb_control_msg 接口
- codeforces 600E E. Lomsat gelral (线段树合并)
- docker运行容器后agetty进程cpu占用率100%
- Android 隐藏顶部菜单栏
- TextInputLayout低版本bug :“android.view.InflateException: Binary XML file line #6 : Error inflating class Textview”