2022-4-6 高频面试题

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

子数组 是数组的连续子序列。

 1 class Solution {
 2     public int maxProduct(int[] nums) {
 3         //动态规划
 4         // f[i][0] 以i结尾的最大值 f[i][1] 最小值
 5         // 最大值 nums[i]
 6         // num -   +  -  +  +  -  -  
 7         // 最大值 
 8         int n=nums.length;
 9         int[][] dp=new int[n][2];
10         dp[0][0]=nums[0];
11         dp[0][1]=nums[0];
12         int ans=dp[0][0];
13         for (int i=1;i<n;i++) {
14             if (nums[i]>=0) {
15                 dp[i][0]=Math.max(dp[i-1][0]*nums[i],nums[i]);
16                 dp[i][1]=Math.min(dp[i-1][1]*nums[i],nums[i]);
17             }else {
18                 dp[i][1]=Math.min(nums[i]*dp[i-1][0],nums[i]);
19                 dp[i][0]=Math.max(nums[i]*dp[i-1][1],nums[i]);
20             }
21             //System.out.println(dp[i][0]+" "+dp[i][1]);
22             ans=Math.max(ans,dp[i][0]);
23         }
24         return ans;
25     }
26 }

思路:动态规划,记录到当前下标位置的最大值和最小值。

posted on 2022-04-06 11:17  阿ming  阅读(22)  评论(0编辑  收藏  举报

导航