【问题标题】:find the highest product you can get from three of the integers in an array - how to solve using brute force找到可以从数组中的三个整数中获得的最高乘积 - 如何使用蛮力解决
【发布时间】:2017-06-19 10:34:21
【问题描述】:
int arr[] = {10, 10, 1, 3};

假设:假设每个 int 都是正数。假设数组至少包含 3 个整数

从上述数组中的三个整数中找出您可以得到的最高乘积。我们应该返回 300(我们通过取 10 ∗ 10 ∗ 3 得到)。

我想用蛮力方法解决这个问题。基本上,我想将每个整数乘以其他整数,然后将该乘积乘以其他整数。谁能告诉我如何使用嵌套的 3 个循环来完成此操作因为我想在尝试优化方法之前先了解它是如何使用蛮力完成的。

谢谢。

【问题讨论】:

  • 为什么不对数组进行排序,排序后使用3个最大值?
  • 可能的范围是多少?任何元素都可以是负数吗?元素可以为零吗?
  • @YCF_L:如果允许负数和零,将无法正常工作。目前这个问题无法回答。
  • @Anonymous 为什么要在 O(n) 时间和 O(1) 额外空间内解决它时进行排序?
  • 有人可能应该只是将蛮力解决方案发布为Find maximum product of 3 numbers in an array 的答案,然后我们可以将其作为副本关闭,并将此问题的所有解决方案放在一个地方,因为这里有一个解决方案,其他地方的一些解决方案和其他地方的更多解决方案没有多大意义。

标签: java algorithm


【解决方案1】:

使用三个 for 循环:

public static Integer highestProduct(int array[]) 
{
    if((array==null)||(array.length<3))
    {
        return null;
    }

    else
    {
        int max_product = Integer.MIN_VALUE;
        for(int i=0;i<array.length;i++)
        {
            for(int j=i+1;j<array.length;j++)
            {
                for(int k=j+1;k<array.length;k++)
                {
                    int product = array[i]*array[j]*array[k];
                    if(product>=max_product)
                    {
                        max_product = product;
                    }
                }
            }
        }
        return max_product;
     }
 }

【讨论】:

  • 很好的分析,尤其是开头的检查。不过,缩进可以改进。考虑到其他限制,我发现int product = 1 更可口。
  • 哦,是的,你说得对,我编辑了它。我还改进了缩进。
  • 虽然可爱,但算法有缺陷,整数溢出。
  • 你应该交换productmax_product
  • return 我猜应该是 max_product。
【解决方案2】:

有一些解决方案可以忽略蛮力。

1.排序

首先你可以对数组进行排序,它需要 O(nlogn) 时间。 排序后选择最后 3 个项目。由于它们是最高的项目,因此产品将最大

注意:如果您的数组中有任何负数,它将不起作用。 要修复它,您可以检查一些组合。首先计算前 3 项产品,然后计算后 3 项,然后计算前 2 项和后 1 项。其中一个将是最大的。

2。动态规划

请参阅matrix chain multiplicationmax growing length 问题及其动态规划解决方案。它将帮助您了解什么是动态规划并创建简单的算法来解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-02
    • 2019-10-24
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    相关资源
    最近更新 更多