从一个无序,不相等的数组中,选取N个数,使其和为M实现算法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从一个无序,不相等的数组中,选取N个数,使其和为M实现算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1780字,纯文字阅读大概需要3分钟。
内容图文
![从一个无序,不相等的数组中,选取N个数,使其和为M实现算法](/upload/InfoBanner/zyjiaocheng/625/eec39f791f054280ad8ab8d47e3928d0.jpg)
// 递归分解,最后转换成求2数之和
// 一个方法从 2Sum 秒杀到 100Sum
// https://leetcode-cn.com/problems/3sum/solution/yi-ge-fang-fa-tuan-mie-by-labuladong/
var nSumTarget = function (nums, n, start, target) {
let res = []
if (n < 2 || n > nums.length) {
return res
}
if (n == 2) {
let low = start;
let high = nums.length - 1;
while (low < high) {
let sum = nums[low] + nums[high];
let left = nums[low]
let right = nums[high]
if (sum < target) {
while (low < high && nums[low] === left) {
low++
}
} else if (sum > target) {
while (low < high && nums[high] === right) {
high--
}
} else {
res.push([left, right])
while (low < high && nums[low] === left) {
low++
}
while (low < high && nums[high] === right) {
high--
}
}
}
} else {
for (let i = start; i < nums.length; i++) {
let sub = nSumTarget(nums, n - 1, i + 1, target - nums[i])
for (let arr of sub) {
arr.push(nums[i])
res.push(arr)
}
while (i < nums.length && nums[i] === nums[i + 1]) {
i++
}
}
}
return res
}
var findGroup = function (nums, n, sum) {
nums = nums.sort((a, b) => a - b)
return nSumTarget(nums, n, 0, sum)
};
// 位运算
// https://blog.csdn.net/weixin_34130269/article/details/91382220
const search = (arr, count, sum) => {
// 计算某选择情况下有几个 `1`,也就是选择元素的个数
const n = num => {
let count = 0
while (num) {
num &= (num - 1)
count++
}
return count
}
let len = arr.length, bit = 1 << len, res = []
// 遍历所有的选择情况
for (let i = 1; i < bit; i++) {
// 满足选择的元素个数 === count
if (n(i) === count) {
let s = 0, temp = []
// 每一种满足个数为 N 的选择情况下,继续判断是否满足 和为 M
for (let j = 0; j < len; j++) {
// 建立映射,找出选择位上的元素
if ((i & 1 << j) !== 0) {
s += arr[j]
temp.push(arr[j])
// 左移,从右边的index往左边看
// s += arr[len -1 - j]
// temp.push(arr[len -1 - j])
}
}
// 如果这种选择情况满足和为 M
if (s === sum) {
res.push(temp)
}
}
}
return res
}
内容总结
以上是互联网集市为您收集整理的从一个无序,不相等的数组中,选取N个数,使其和为M实现算法全部内容,希望文章能够帮你解决从一个无序,不相等的数组中,选取N个数,使其和为M实现算法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。