Java 从一个数组中的三个整数中找出最高乘积-如何使用蛮力求解
假设:假设每个int都是正的。假设数组至少包含3个整数 从上面数组中的三个整数中找出可以得到的最高乘积。我们应该返回300(取10得到)∗ 10∗ 3) 我想用蛮力法解决这个问题。基本上,我想把每个整数乘以另一个整数,然后把乘积乘以另一个整数。有人能告诉我如何使用嵌套的3个循环来实现这一点吗?因为在尝试优化方法之前,我想先了解如何使用蛮力来实现这一点。Java 从一个数组中的三个整数中找出最高乘积-如何使用蛮力求解,java,algorithm,Java,Algorithm,假设:假设每个int都是正的。假设数组至少包含3个整数 从上面数组中的三个整数中找出可以得到的最高乘积。我们应该返回300(取10得到)∗ 10∗ 3) 我想用蛮力法解决这个问题。基本上,我想把每个整数乘以另一个整数,然后把乘积乘以另一个整数。有人能告诉我如何使用嵌套的3个循环来实现这一点吗?因为在尝试优化方法之前,我想先了解如何使用蛮力来实现这一点。 谢谢。使用三个for循环: int arr[] = {10, 10, 1, 3}; public静态整数最高乘积(int数组[]) { 如果
谢谢。使用三个for循环:
int arr[] = {10, 10, 1, 3};
public静态整数最高乘积(int数组[])
{
如果((array==null)| |(array.length使用三个for循环:
int arr[] = {10, 10, 1, 3};
public静态整数最高乘积(int数组[])
{
如果((array==null)| |(array.length有一些解决方案可以忽略暴力
1.排序
首先可以对数组进行排序,这需要O(nlogn)时间。
排序后,选择最后3个项目。因为它们是最高的项目,所以产品将最大
注意:如果数组中有任何负数,它将不起作用。
为了修复它,你可以检查一些组合。首先计算前3项产品,然后计算最后3项,然后计算前2项和最后1项。其中一项将是最大的
2.动态规划
请参阅或问题和动态规划解决方案。它将帮助您理解什么是动态规划,并创建简单的算法来解决您的问题。有一些解决方案可以忽略暴力
1.排序
首先可以对数组进行排序,这需要O(nlogn)时间。
排序后,选择最后3个项目。因为它们是最高的项目,所以产品将最大
注意:如果数组中有任何负数,它将不起作用。
为了修复它,你可以检查一些组合。首先计算前3项产品,然后计算最后3项,然后计算前2项和最后1项。其中一项将是最大的
2.动态规划
请参阅或问题和动态规划解决方案。这将帮助您理解什么是动态规划,并创建简单的算法来解决您的问题。为什么不对数组进行排序,并在排序后使用3个最大值?可能的范围是什么?任何元素都可以为负数吗?元素可以为零吗?@YCF\u L:will如果允许负数和零,则无法正常工作。目前无法回答此问题。@Anonymous为什么要在O(n)时间和O(1)内解决此问题额外的空间?可能有人应该发布蛮力解决方案作为答案,然后我们可以将其作为副本关闭,并将此问题的所有解决方案放在一个地方,因为这里的一个解决方案、其他地方的一些解决方案和其他地方的一些解决方案没有多大意义。为什么不对数组进行排序并使用3个最大值排序后的s?可能的范围是什么?任何元素都可以是负数吗?一个元素可以是零吗?@YCF_L:如果允许负数和零,将无法正常工作。目前这个问题无法回答。@Anonymous当可以在O(n)时间和O(1)内解决时,为什么要排序额外的空间?可能有人应该发布暴力解决方案作为答案,然后我们可以将其作为副本关闭,并将此问题的所有解决方案放在一个地方,因为这里的一个解决方案、其他地方的一些解决方案和其他地方的一些解决方案没有多大意义。很好的分析,尤其是开始时的检查。t但是缩进可以改进。考虑到其他约束条件,我发现int product=1
更容易接受。哦,是的,你是对的,我编辑了它。我也改进了缩进。虽然很可爱,但算法存在整数溢出问题。你应该交换product
和max\u product
。返回b我猜是e max_乘积。很好的分析,特别是开始时的检查。但是缩进可以改进。考虑到其他约束条件,我发现int product=1
更令人满意。哦,是的,我编辑了它。我也改进了缩进。虽然很可爱,但算法存在整数溢出问题。你应该ld exchangeproduct
和max\u product
。我想返回的应该是max\u product。