Product of Array Except Self

 1、Product of Array Except Self

 1 class Solution {
 2 public:
 3     vector<int> productExceptSelf(vector<int>& nums) {
 4         vector<int> output(nums.size(), 1);
 5         if(nums.empty())
 6                return output;
 7         int left=1, right=1;
 8         for(int i=0; i<nums.size(); i++)
 9         {
10             output[i] = left;
11             left = left * nums[i];
12         }
13         for(int i=nums.size()-1; i>=0; i--)
14         {
15             output[i] = right * output[i];
16             right = right * nums[i];            
17         }
18         
19         return output;
20     }
21 };

2、Maximum Subarray

 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         if(nums.empty())
 5             return 0;
 6         vector<int> local(nums.size(), 0);    
 7         vector<int> global(nums.size(), 0);
 8         local[0]= nums[0];
 9         global[0] = nums[0];
10         for(int i=1; i<nums.size(); i++)
11         {
12             local[i] = max(local[i-1]+nums[i], nums[i]);
13             global[i] = max(local[i], global[i-1]);
14         }
15         
16         return global[nums.size()-1];
17     }
18 };
 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         if(nums.empty())
 5             return 0;
 6         int sum = 0;
 7         int maxsum =nums[0];
 8         for(int i=0; i<nums.size(); ++i)
 9         {
10              if(nums[i]+sum< nums[i])
11                   sum = 0;
12              sum += nums[i];
13              if(maxsum < sum)
14                   maxsum = sum;
15              
16         }
17        return maxsum;
18     }
19 };

3、Maximum Product Subarray

 1 class Solution {
 2 public:
 3     int maxProduct(vector<int>& nums) {
 4         if(nums.empty())
 5              return 0;
 6         int max_l = nums[0];
 7         int min_l = nums[0];
 8         int max_g = nums[0];
 9         for(int i=1; i<nums.size(); i++)
10         {
11             int tmp_max = max_l;
12             max_l = max(max(tmp_max*nums[i], nums[i]), min_l*nums[i]);
13             min_l = min(min(tmp_max*nums[i], nums[i]), min_l*nums[i]);
14             max_g = max(max_g, max_l);
15         }
16         return max_g;
17     }
18 };
原文地址:https://www.cnblogs.com/daocaorenblog/p/5541363.html