算法: 最大相邻数乘积152. Maximum Product Subarray

算法: 最大相邻数乘积152. Maximum Product Subarray

Given an integer array nums, find a contiguous non-empty subarray within the array that has the largest product, and return the product.

It is guaranteed that the answer will fit in a 32-bit integer.

A subarray is a contiguous subsequence of the array.

Example 1:

Input: nums = [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

Example 2:

Input: nums = [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

Constraints:

  • 1 <= nums.length <= 2 * 104
  • -10 <= nums[i] <= 10
  • The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.

左右两边指针解法

让我试着对这个解决方案做一些解释。

首先,如果数组中没有零,那么具有最大乘积的子数组必须从第一个元素开始或从最后一个元素结束。因此,最大乘积必须是某个前缀乘积或后缀乘积。因此,在这个解决方案中,我们计算出产品的前缀A和后缀的产品B,并简单地返回最大的A和B。

为什么?这是证据:

假设我们有一个子数组A[i : j]( i != 0, j != n) 并且里面的元素的乘积是P。就拿P > 0例如:如果A[i] > 0或者A[j] > 0,那么很明显,我们应该扩展子阵包括A[i]或A[j]; 如果A[i]和A[j]都是负数,则扩展此子数组以包含两者A[i]并A[j]获得更大的乘积。重复这个过程,最终我们将到达 的开始或结束A。

如果数组中有零怎么办?好吧,我们可以将数组拆分为几个较小的数组。也就是说,当前缀积为 时0,我们从当前元素重新开始计算前缀积。而这正是A[i] *= (A[i - 1]) or 1它的作用。

class Solution {
    public int maxProduct(int[] nums) {
        int res = nums[0];
        int l = 0, r = 0;
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            l = (l == 0 ? 1 : l) * nums[i];
            r = (r == 0 ? 1 : r) * nums[len - 1 - i];
            res = Math.max(res, Math.max(l, r));
        }
        return res;
    }
}

参考

https://leetcode.com/problems/maximum-product-subarray/discuss/183483/JavaC%2B%2BPython-it-can-be-more-simple

Read more

计算机毕业设计项目之https://zeeklog.com小程序ssm社区心理健康服务平台+后台管理系统|前后分离

计算机毕业设计项目之https://zeeklog.com小程序ssm社区心理健康服务平台+后台管理系统|前后分离

一、项目介绍 本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用Java+VUE 微信小程序——前台涉及技术:WXML 和 WXSS、JavaScript、uniapp Java——后台涉及技术: 前端使用技术:JSP,HTML5,CSS3、JavaScript、VUE等 后端使用技术:Spring、SpringMvc、Mybatis(SSM)等 数据库:Mysql数据库 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 系统主要分为管理员和用户、咨询师三部分, 管理员服务端:首页、个人中心、用户管理、咨询师管理、心理书籍管理、相关资源管理、试卷管理、试题管理、系统管理、订单管理, 咨询师客户端:首页、

By Ne0inhk
计算机毕业设计项目之基于javaweb+mysql数据库实现的在线学习网站

计算机毕业设计项目之基于javaweb+mysql数据库实现的在线学习网站

一、项目介绍 使用技术: 前端使用技术:JSP,HTML5,CSS3、JavaScript等 后台使用技术:Servlet、JDBC等 数据库:Mysql数据库 项目功能介绍: 本系统为基于jsp+mysql的在线学习网站,包含学生、教师、系统管理员等登录权限,功能如下: 学生:可以注册、登录系统;可以在首页查看最新作业、最新资料、查看公告;学生登录之后可以下载作业, 下载资料,在线点击观看教学视频;可以进行在线自测,可以查看留言板并进行留言。 教师:也可以注册、登录系统;登录系统之后的功能基本和学生一致,但是教师可以发布作业,而学生不可以 。 管理员:管理员维护、专业管理、班级管理、老师管理、学生管理、公告管理、留言板、资料下载管理、教师视频管理、 在线自测题目管理、简单题管理。 二、

By Ne0inhk
计算机毕业设计项目之https://zeeklog.com小程序在线旅游信息管理+后台管理系统

计算机毕业设计项目之https://zeeklog.com小程序在线旅游信息管理+后台管理系统

一、项目介绍 本系统包含微信小程序做的旅游前台和Java做的后台管理系统: 微信小程序——旅游前台涉及技术:WXML 和 WXSS、JavaScript Java——旅游后台涉及技术: 前端使用技术:JSP,HTML5,CSS3、JavaScript、jQuery、bootstrap等 后台使用技术:Spring、SpringMvc、Mybatis(SSM)等 数据库:Mysql数据库 前台功能介绍:查看并搜索所有的行程,行程预定、查看游记、收藏游记、发布游记、评价、查看我的行程、查看酒店、查看我的收藏、登录、注册 后台管理:登录、注册、留言的增删查、行程的增删改查、酒店管理、游记的增加查询删除收藏、 用户的添加删除修改、角色的添加删除修改、菜单的添加删除修改。 二、运行截图

By Ne0inhk
科普文:软件架构设计之【优化实践:网易云音乐会员支付链路优化实践】

科普文:软件架构设计之【优化实践:网易云音乐会员支付链路优化实践】

支付链路整体承载了云音乐业务的主要交易流量。随着营收业务的快速增长,链路整体的复杂性持续提升的同时,也带来稳定性与支付效率的压力。2023年,我们以专项的方式对支付链路的各个环节尝试了不同方式的优化方案,并取得了一些核心指标增长的优化结果。本文主要介绍云音乐会员团队在支付链路优化上所做的一些解决方案和思路。 业务背景 支付链路,从用户进入支付触点开始到订单支付完成、履约结束,整体承载了云音乐业务的主要交易流量,涵盖会员、数专、商城等多种业务场景以及支付宝、微信、抖音等各类支付渠道与支付方式。随着营收业务的快速增长,链路整体的复杂性持续提升的同时,也带来稳定性与支付效率的压力。 2023年,我们以专项的方式对支付链路的各个环节尝试了不同方式的优化方案,并取得了一些核心指标增长的优化结果。本文主要介绍云音乐会员团队在支付链路优化上所做的一些解决方案和思路。 优化总览 完整的支付链路包含引导用户购买的支付触点、不同形态和意图的收银台、承载营销和商品信息的订单服务、三方支付的渠道以及支付结束后的履约和挽留。支付链路是个巨大的流量漏斗,每个环节都有一定的用户流失,如收银台的到达率

By Ne0inhk