跳过正文
  1. Posts/

[152] Maximum Product Subarray

·1 分钟·
目录

题目:
#

Find the contiguous subarray within an array (containing at least one number) which has the largest product. For example, given the array [2,3,-2,4], the contiguous subarray [2,3] has the largest product = 6.

题意:
#

题目中给出一个(至少包含一个元素)整形数组,求一个子数组(元素连续),使得其元素之积最大。最直接了当的方法,当然是暴力穷举,但是其O(n^2)是无法通过 OJ 评判的。

C语言实现如下:

    int maxProduct(int* nums, int numsSize) {
            int nMaxPro = nums[0];
            int max_tmp = nums[0];
            int min_tmp = nums[0];

            for(int i = 1; i< numsSize; ++i){
                int a = nums[i] * max_tmp;
                int b = nums[i] * min_tmp;

                max_tmp = (( a > b ? a : b ) > nums[i]) ? ( a > b ? a : b ) : nums[i];
                min_tmp = (( a < b ? a : b ) < nums[i]) ? ( a < b ? a : b ) : nums[i];

                nMaxPro = (nMaxPro > max_tmp) ? nMaxPro : max_tmp;
            }

            return nMaxPro;
	}

C++实现如下:

    class Solution {
		public:
		    int maxProduct(vector<int>& nums) {
	            int nMaxPro = nums[0];
	            int max_tmp = nums[0];
	            int min_tmp = nums[0];

	            for(int i = 1; i< nums.size(); ++i){
	                int a = nums[i] * max_tmp;
	                int b = nums[i] * min_tmp;

	                max_tmp = (( a > b ? a : b ) > nums[i]) ? ( a > b ? a : b ) : nums[i];
	                min_tmp = (( a < b ? a : b ) < nums[i]) ? ( a < b ? a : b ) : nums[i];

	                nMaxPro = (nMaxPro > max_tmp) ? nMaxPro : max_tmp;
	            }

	            return nMaxPro;
		    }
	};

Java实现如下:

	public class Solution {
		 public int maxProduct(int[] nums) {
            int nMaxPro = nums[0];
            int max_tmp = nums[0];
            int min_tmp = nums[0];

            for(int i = 1; i< nums.length; ++i){
                int a = nums[i] * max_tmp;
                int b = nums[i] * min_tmp;

                max_tmp = (( a > b ? a : b ) > nums[i]) ? ( a > b ? a : b ) : nums[i];
                min_tmp = (( a < b ? a : b ) < nums[i]) ? ( a < b ? a : b ) : nums[i];

                nMaxPro = (nMaxPro > max_tmp) ? nMaxPro : max_tmp;
            }

            return nMaxPro;
	    }
	}
    

相关文章

scala Day2

·5 分钟
因为这几天在学习Coursera公开课Principles of Reactive Programming ,因为之前木有木有注意到需要对至少一门函数式编程语言solid foundation,因此只能临时抱佛脚,恰好手头有一本七周七语言这本书一直木有看,借着这个课程的督促把这本书翻看下,当然内容仅包括Scala这一章,今天看到第二天的内容,重头戏是Collection。这篇blog主要记录关于这次自习题的解答。

博客之旅

·1 分钟
如果你不给自己烦恼,别人也永远不可能给你烦恼,因为你自己的内心,你放不下 其实写博客一直在我的ToDoList上,不过放的时间有点久。我就是这样一个人,想干的太多,做到的却相当少。因此写这个博客的目的也是想督促自己前行,记录生活点滴的同时也能够让自己对生活有一些感悟。告诉自己,世界很大,千万不要局限在自己的小圈圈里无法自拔!