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   阿ming  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示