gpt4 book ai didi

java - 数组中的给定元素找到等于目标值的组合

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:17 26 4
gpt4 key购买 nike

我已经思考这个问题很长时间了,但出于某种原因,它并没有在我脑海中浮现。如果给我一个数组 [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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com