• 编程之美2.13 最大子阵列产品


          这个问题是目前正在寻求 n-1 最大的产品编号。该数组的大小 n。它会存在 n 一个 n-1 连续数。然后,我们需要找到一个最大的产品。

          事实上看到题目,感觉非常easy,循环走两遍数组就能够得到结果,可是,那样的话,复杂度是平方量级的,假设一个数组中元素非常多。那么,时间效率上是不能接受的。所以,须要又一次思考问题。寻找简洁的解法。

          这里。我们能够利用辅助数组的办法,把须要乘在一起的数字保存下来。单独的放到数组中,然后乘在一块就能够了。这样说起来事实上不是那么easy理解,我还是贴出代码吧,里面会有凝视。看完代码也就清晰了:

          函数声明:

    /*2.13 子数组的最大乘积*/
    ll DutMaxMultipleInArray(int*, int);

          源码:

    /*随意n - 1个数的组合中乘积最大的一组*/
    bool _DutMaxMultipleInArray = false;
    ll DutMaxMultipleInArray(int* A, int size)
    {
    	if (!A || size <= 0)
    	{
    		_DutMaxMultipleInArray = true;
    
    		return -1;
    	}
    
    	/*两个辅助数组,数组元素存储1 -- n - 1个数的乘积*/
    	ll* s = new ll[size];
    	ll* t = new ll[size];
    
    	ll maxValue = 1 << 31;
    
    	s[0] = 1;
    	t[size - 1] = 1;
    
    	for (int i = 1; i < size; ++i)
    		s[i] = A[i - 1] * s[i - 1];
    
    	for (int j = size - 2; j >= 0; --j)
    		t[j] = A[j + 1] * t[j + 1];
    
    	ll* p = new ll[size];
    
    	for (int k = 0; k < size; ++k)
    	{
    		/*循环走一遍数组元素就能够得到n - 1个数组元素乘积的全部组合*/
    		p[k] = s[k] * t[k];
    
    		/*每次比較最大值选择最大就可以*/
    		if (p[k] > maxValue)
    			maxValue = p[k];
    	}
    
    	return maxValue;
    }


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    sessionId控制单点登陆
    验证码的编写
    关于selectpicker的多选问题
    java的excel表格的导出与下载
    SpringMVC的乱码问题
    乱码的解决问题
    layui select下拉框监听值变化 layui 下拉列表的change事件
    RabbitMQ在Ubuntu上的环境搭建
    JAVA中 redisTemplate 和 jedis的配合使用
    优化JAVA查询Mongodb数量过大,查询熟读慢的方法
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4631289.html
Copyright © 2020-2023  润新知