首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

☆打卡算法☆LeetCode 152. 乘积最大子数组 算法解析

一、题目 1、算法题目 “给定一个整数数组,找出数组中乘积最大的非空连续子数组,并返回该子数组所对应的乘积。” 题目链接: 来源:力扣(LeetCode) 链接: 152....乘积最大子数组 - 力扣(LeetCode) 2、题目描述 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...示例 1: 输入: nums = [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...这道题的题意是要求遍历数组计算乘积最大的值。...三、总结 这道题就是求数组中子区间的最大乘积。 对于乘法,负负得正,所以对于这道题要维护两个变量,一个最大值一个最小值。 最小值可能为负数,负数乘负数,当前的最大值就变成最小值,最小值就变成最大值了。

40720

【数据结构和算法】除自身以外数组的乘积

二、题解 思路与算法: 本题的难点在于 不能使用除法 ,即需要 只用乘法 生成数组 ans 。根据题目对 ans[i] 的定义,可列出下图所示的表格。...计算 ans[i] 的 下三角 各元素的乘积,直接乘入 ans[i] 。 计算 ans[i] 的 上三角 各元素的乘积,记为 tmp ,并乘入 ans[i] 。 返回 ans 。...补充: 见下图就知道了: 原数组: [1 2 3 4] 左部分的乘积: 1 1 1*2 1*2*3 右部分的乘积: 2*3...*4 3*4 4 1 结果: 1*2*3*4 1*3*4 1*2*4 1*2*3*1 从上面的图可以看出,当前位置的结果就是它左部分的乘积再乘以它右部分的乘积...因此需要进行两次遍历,第一次遍历用于求左部分的乘积,第二次遍历在求右部分的乘积的同时,再将最后的计算结果一起求出来。

11410

互联网高频算法面试题-构建乘积数组

今天带来一道与数组相关的面试高频题,这道题在半年内被字节、微软和亚马逊等互联网大厂作为面试题考过,即力扣上的第 238 题-除自身以外数组的乘积和剑指 Offer 66 题-构建乘积数组。...示例及提示 解题思路 本题最容易想到的方法:将数组元素都相乘,再将乘积除以原数组的每一个元素,即可得到构建后乘积数组中每个元素的值。...要求构建乘积数组后某下标对应元素的值,可以考虑分别求出该下标对应左边(不含该下标)元素的乘积和其右边的元素的乘积,最后将两个乘积再相乘即可。...例子 要求除下标为 2 以外的元素的积 求除下标为 2 以外的元素的积 先求下标为 2 左侧元素的乘积; 下标为 2 左侧元素的积 再求下标为 2 右侧元素的乘积(只有一个元素 4); 所以除下标为...2 以外的元素的积为左侧乘积 * 右侧乘积

23830

乘积最大子数组

题目 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...解答 首先假设存在某个最大乘积,然后对数组遍历,在经过每个元素的时候,有以下四种情况: 如果该元素为正数: 如果到上一个元素为止的最大乘积也是正数,那么直接乘上就好了,同样的最大乘积也会变得更大 如果到上一个元素为止的最大乘积是负数...,那么最大乘积就会变成该元素本身,且连续性被断掉 如果该元素为负数: 如果到上一个元素为止的最大乘积也是负数,那么直接乘上就好了,同样的最大乘积也会变得更大 如果到上一个元素为止的最大乘积是正数,那么最大乘积就会不变...,且连续性被断掉 以上四种情况中说到的最大乘积都是临时最大乘积,每遍历新的元素都需要进行比较来确定真正的最大乘积。...如果要得到乘以当前元素以后的最大乘积,需要记录最大乘积,也要记录最小乘积,因为最小值可能翻身变最大值。

47420

构建乘积数组

构建乘积数组 题目描述 给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-...示例: 输入: [1,2,3,4,5] 输出: [120,60,40,30,24] 提示: 所有元素乘积之和不会溢出 32 位整数 a.length <= 100000 思路分析 B[i]的意义是A数组不包括...i位置的所有乘积,分为i左边的元素乘积和i右边的所有的元素乘积。...对称遍历 从左往右遍历累乘,结果保存在数组 B 中,此时 B[i] 表示,A[i] 左边所有元素的乘积 然后从右往左遍历累乘,获取A[i] 右边所有元素的乘积 right,用 B[i]乘以right 两边遍历之后得到的...// 初始化 B[0] = 1, 是因为0左边没有元素, 所以乘积为1 B[0] = 1; for(let i = 1; i < len; i++) {

33830

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券