定个小目标之刷LeetCode热题(27)

这道题,我们可以使用动态规划,假设数组元素范围是>=0,那么递推关系式表示为

imax = MAX(imax * nums[i], nums[i]),由于本题数组元素范围是整数,即存在负数,最大可能变最小,最小可能变最大,所以除了维护一个max,还需要维护一个imin,imin = MIN(imin * nums[i], nums[i]),在遇到负数时,需要将imax和imin进行交换,画草图如下

知道了思路,代码很容易就能敲出来,代码如下所示

java 复制代码
class Solution {
    public int maxProduct(int[] nums) {
        if (nums.length == 1)
            return nums[0];
        int imax = 1, imin = 1, max = Integer.MIN_VALUE;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0) {
                int temp = imax;
                imax = imin;
                imin = temp;
            }
            imax = Math.max(imax * nums[i], nums[i]);
            imin = Math.min(imin * nums[i], nums[i]);
            max = Math.max(max, imax);
        }
        return max;
    }
}

题目链接:题单 - 力扣(LeetCode)全球极客挚爱的技术成长平台

相关推荐
前端小L36 分钟前
图论专题(十九):DAG上的“关键路径”——极限规划「并行课程 III」
算法·矩阵·深度优先·图论·宽度优先
scx2013100437 分钟前
20251116 树状DP总结
算法·深度优先·图论
Aspect of twilight1 小时前
LeetCode华为大模型岗刷题
python·leetcode·华为·力扣·算法题
2301_807997381 小时前
代码随想录-day47
数据结构·c++·算法·leetcode
Elias不吃糖1 小时前
LeetCode每日一练(3)
c++·算法·leetcode
小龙报1 小时前
《算法通关指南数据结构和算法篇(2)--- 链表专题》
c语言·数据结构·c++·算法·链表·学习方法·visual studio
艾莉丝努力练剑2 小时前
【优选算法必刷100题】第031~32题(前缀和算法):连续数组、矩阵区域和
大数据·人工智能·线性代数·算法·矩阵·二维前缀和
醉颜凉2 小时前
环形房屋如何 “安全劫舍”?动态规划解题逻辑与技巧
c语言·算法·动态规划
大雨淅淅2 小时前
一文搞懂动态规划:从入门到精通
算法·动态规划
不去幼儿园2 小时前
【启发式算法】灰狼优化算法(Grey Wolf Optimizer, GWO)详细介绍(Python)
人工智能·python·算法·机器学习·启发式算法