- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经思考这个问题很长时间了,但出于某种原因,它并没有在我脑海中浮现。如果给我一个数组 [1,2,3,4] 和一个目标值,比如 5。我想从数组中获取所有可能的组合,以便将它们添加到目标值。
所以我能想到的一种方法是
1!=5
1+2!=5
1+3!=5
1+4=5
//now check with combos of 3 digits.
1+2+3 !=5
1+2+4 !=5
//now check with combos of 4...however at this point i realized i missed the combination 1+3+4 also.
我在网上看到了一些答案,但他们似乎没有意义,我对其他答案或代码并不感兴趣,我想学习如何正确思考,以便我可以解决此类问题。我想知道是否有人可以指导我并帮助我解决这个问题,以及我应该如何考虑解决这些问题。在这一点上,我并不真正担心效率,因为我什至无法制定一种方法,所以欢迎所有方法。此外,我更喜欢只使用数组和普通循环,而不是任何其他数据结构,如哈希,因为我还没有学过这些。
最佳答案
既然你说你想要“思维方式”,这就是一种方式。
您从最简单的情况开始,做出各种假设
1) 假设所有数组元素都小于目标值。 -- 一个简单的验证将有助于实现完成。
高级步骤
你需要找到一种方法来获得数字的所有可能排列。
然后添加排列的每个元素并检查总和是否匹配“目的地”(这是更简单的任务)
现在来到这里的主要挑战:
如何获取所有可能的排列?
解决方法假设我们有一个单元素数组:解决方案很明显:)
接下来我们有一个包含两个元素的数组:您确定数组的大小:2您必须迭代此大小,因为您的组合将小于或等于此大小。您的第一次迭代的值为 1。即。您正在寻找尺寸一的组合这很简单:您一个一个地遍历数组。
下一次迭代将查找大小为 2 的组合。由于迭代值 (2) 等于数组的大小 (2),您知道只有一种可能的情况。
现在让我们处理一个大小为 3 的数组:
对于大小为 1 的排列,您知道该怎么做。
对于大小 3 的排列,您知道组合是什么。
对于大小为 2 的排列,您需要另一次迭代。您遍历数组,保留数组的当前元素并排列大小为 2 的数组的其余部分。
接下来迭代第二个和第三个元素,并排列大小为 (3-1 = 2) 的数组的其余部分
--------------------------------更新------------ --------------------------------------
接下来让我们尝试一个包含 4 个元素的数组让我们调用 A(4)
对于大小为 1 的排列和大小为 4 的排列,这是显而易见的。
对于大小为 3 的排列,您将重复为大小为 3 的数组获取大小为 2 的排列所执行的过程。你将持有一个元素,你将得到一个大小为 3 的数组。让我们称之为 A(3)
但请记住,您还需要大小为 2 的排列。您可以通过应用相同的可重用组件,从这个大小为 3 的数组本身确定大小为 2 的所有排列。这成为一个递归调用。
所以基本上,大多数时候你必须做一件事。
'如果你有一个大小为 n 的数组; A(n),你需要遍历它,保存被迭代的元素,你将得到一个大小为 n-1 的数组; A(n-1)'
然后再次进行递归调用。并将粗体行中的n替换为n-1
如您所见,这基本上变成了一个递归问题。
这是解决这个问题的一种思路。我希望我能清楚地解释思考过程。
----------------------------------------示例- ----------------------------------------
假设我们有一个数组 {1,2,3,4,5}
我们的函数看起来像
function G (int[] array ) {
Looping over array{
remove array[index] from array
you are left with restOfTheArray .// store it some where.
then
make a recursive call to G with restOfTheArray;
}
}
循环试运行:
Dry run 1:
funtion G (Array (n ) ) {
Looping over {1,2,3,4,5}{
first value while looping is 1, remove it from the array;
you have {2,3,4,5}.// store it some where.
then
make a recursive call to G with {2,3,4,5}
}
}
Dry run 2:
funtion G (Array (n ) ) {
Looping over {1,2,3,4,5}{
second value while looping is 2, remove it from the array;
you have {1,3,4,5}.// store it some where.
then
make a recursive call to G with {1,3,4,5}
}
}
等等……
现在让我们看一下递归调用的试运行:
Dry Run 1.1
funtion G (Array (n ) ) {
Looping over {1,2,3,4,5}{
First value while looping is 1, remove it from the array;
you have {2,3,4,5}.// store it some where.
then
make a recursive call to G with {2,3,4,5}
}
}
Dry Run 1.2
funtion G (Array (n ) ) {
Looping over {2,3,4,5}{
First value while looping is 2, remove it from the array;
you have {3,4,5}.// store it some where.
then
make a recursive call to G with {3,4,5}
}
}
等等……
关于java - 数组中的给定元素找到等于目标值的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811373/
我有一个 mysql 表,其中包含一些随机数字组合。为简单起见,以下表为例: index|n1|n2|n3 1 1 2 3 2 4 10 32 3 3 10 4 4
我有以下代码: SELECT sdd.sd_doc_classification, sdd.sd_title, sdd.sd_desc, sdr.sd_upl
如果我有两个要合并的数据框 Date RollingSTD 01/06/2012 0.16 01/07/2012 0.18 01/08/2012 0.17 01/09/20
我知道可以使用 lein ring war 创建一个 war 文件,但它似乎仍然包含码头依赖项。当我构建 war (并在 tomcat 上部署)时,有没有办法排除码头依赖项? 如果我根本不能做这件事,
维基百科关于封装的文章指出: “封装还通过防止用户将组件的内部数据设置为无效或不一致的状态来保护组件的完整性” 我在一个论坛上开始讨论封装,在那里我问你是否应该始终在 setter 和/或 gette
对于我使用的组合框内的复选框: AOEDComboAssociationName = new Ext.form.ComboBox({ id: 'AOEDComboAssociationName',
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How do I combine LINQ expressions into one? public boo
如何在 rust 中找到排列或组合的数量? 例如C(10,6) = 210 我在标准库中找不到这个函数,也找不到那里的阶乘运算符(这就足够了)。 最佳答案 以@vallentin 的回答为基础,可以进
我有一个复杂的泛型类型用例,已在下面进行了简化 trait A class AB extends A{ val v = 10 } trait X[T<:A]{ def request: T }
如何使用 Hibernate 限制来实现此目的? (((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z'))) 最佳答案 思考有效 Criteria c
我一定会在我的一个项目中使用谷歌图表。我需要的是,显示一个条形图,并且在条形图中,与每个条形相交的线代表另一个值。如果您查看下面的 jsfiddle,您会发现折线图仅与中间的条形图相交,并继续向其他条
只是一个简单的问题,我也很想得到答案,因为我不能百分百理解 Javascript 示例:假设您提示用户输入名称。够简单吧?但是你有一个数组,上面写着一些名字(其中之一就是),基本上就是我到目前为止所说
我试图通过 Haskell 理解函数式编程,但在处理函数组合时遇到了很多麻烦。 其实我有这两个功能: add:: Integer -> Integer -> Integer add x y = x
我正在寻找一种在 Realm 查询中组合 AND 和 OR 的方法。 这是我的课: class Event extends RealmObject { String id; String
例如,我有一个包含 5 个元素的哈希: my_hash = {a: 'qwe', b: 'zcx', c: 'dss', d: 'ccc', e: 'www' } 我的目标是每次循环哈希时都返回,但没
我是Combine 的新手,我想得到一个看似简单的东西。假设我有一个整数集合,例如: let myCollection = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 我想以例如 0
关于“优先组合而不是继承”的问题,我的老师是这样说的: 组合:现有类成为新类的组件 转发:新类中的每个实例方法,在现有类的包含实例上调用相应的方法并返回结果 包装器:新类封装了现有的 这三个概念我不是
我正在尝试将单个整数从 ASCII 值转换为 0 和 1。相关代码如下所示: int num1 = bin.charAt(0); int num2 = bin.charAt(1);
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 7 年前。 我经常看到“嵌套”类中的非静态变
我尝试合并两个数据集(DataFrame),如下所示: D1 = pd.DataFrame({'Village':['Ampil','Ampil','Ampil','Bachey','Bachey',
我是一名优秀的程序员,十分优秀!