首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自身以外数组乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...对于给定索引 iii,我们将使用它左边所有数字乘积乘以右边所有数字乘积。下面让我们更加具体描述这个算法。 算法     初始化两个空数组 L 和 R。...对于给定索引 i,L[i] 代表是 i 左侧所有数字乘积,R[i] 代表是 i 右侧所有数字乘积。     我们需要用两个循环来填充 L 和 R 数组值。...对于数组 L,L[0] 应该是 1,因为第一个元素左边没有元素。对于其他元素:L[i] = L[i-1] * nums[i-1]。     同理,对于数组 R,R[length-1] 应为 1。...- 2; i >= 0; i--) { R[i] = nums[i + 1] * R[i + 1]; } // 对于索引 i, nums[i

13730

自身以外数组乘积(LeetCode 238)

1.问题描述 给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...可以先计算给定数组所有元素乘积,然后对数组每个元素 x,将乘积除以 x 求得自身值以外数组乘积。 然后这样解决方法有一个问题,就是如果输入数组中出现 0,那么这个方法就失效了。...时间复杂度: O(n^2),需要两层遍历,第一层为遍历数组每一个元素,第二层是遍历数组当前元素其他所有元素。 空间复杂度: O(1)。...对于给定索引 i,我们将使用它左边所有数字乘积乘以右边所有数字乘积。 具体步骤如下: 初始化两个空数组 L 和 R。...自身以外数组乘积 - LeetCode

13610
您找到你想要的搜索结果了吗?
是的
没有找到

自身以外数组乘积

题目: 给你一个长度为 n 整数数组 nums,其中 n > 1返回输出数组 output ,其中 output[i] 等于 nums 中 nums[i] 之 外其余各元素乘积。...示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素全部前缀元素和后缀(甚至是整个数组乘积都在 32 位整数范围内。...( 出于对空间复杂度分析目的,输出数组不被视为额外空间。)...Related Topics 数组 前缀和 二.思路: 把当前数组分成数字左边和数字右边两个部分 然后进行两次遍历 第一次遍历求出当前数字左边数字积 第二次遍历求出当前数字右边数字积 注意,好好利用一个初始乘积为...1,然后左边积就从左边开始,右边积是用右边开始 参考如下 原数组: [1 2 3 4] 左部分乘积: 1 1 1*2

32420

自身以外数组乘积

给定长度为 n 整数数组 nums,其中 n > 1返回输出数组 output ,其中 output[i] 等于 nums 中 nums[i] 之外其余各元素乘积。...示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。 进阶: 你可以在常数空间复杂度内完成这个题目吗?...( 出于对空间复杂度分析目的,输出数组不被视为额外空间。) 解:如果不考虑空间复杂度,题目很简单,一个数组nums[i]左边所有数乘积,一个数组nums[i]右边所有数乘。...Numbers: 2 3 4 5 Lefts: 1 2 2x3 2x3x4 Rights: 3x4x5 4x5 5 1 We can calculate lefts and rights in 2...- 1; i >= 0; i--) { if (i < nums.length - 1) { right = right * nums[i +

39410

自身以外数组乘积

题目 给你一个长度为 n 整数数组 nums,其中 n > 1返回输出数组 output ,其中 output[i] 等于 nums 中 nums[i] 之外其余各元素乘积。...对此由以下解法: 算法一(摘自LeetCode官方解法): 初始化两个空数组 L 和 R。对于给定索引 i,L[i] 代表是 i 左侧所有数字乘积,R[i] 代表是 i 右侧所有数字乘积。...我们需要用两个循环来填充 L 和 R 数组值。对于数组 L,L[0] 应该是 1,因为第一个元素左边没有元素。对于其他元素:L[i] = L[i-1] * nums[i-1]。...定义返回数组 returnNums 并将其看作共享数组,同时从左右两端填充数据;之后定义 left,right 来存储左右乘积并循环迭代更新。...空间复杂度:O(1),题目中所述,返回数组空间不算,故所使用额外存储空间为 left 和 right。故只有常数级别的空间复杂度。

33710

LeetCode-238-自身以外数组乘积

# LeetCode-238-自身以外数组乘积 题目来自于力扣https://leetcode-cn.com/problems/product-of-array-except-self 给你一个长度为...n 整数数组 nums,其中 n > 1返回输出数组 output ,其中 output[i] 等于 nums 中 nums[i] 之外其余各元素乘积。...示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素全部前缀元素和后缀(甚至是整个数组乘积都在 32 位整数范围内。...# 解题思路 我们先假设可以使用除法,那么解题思路可以为,先计算出所有元素连续乘积,然后利用最后一个位置总乘积除以当前元素本身值就可以得到结果,但是这种情况没有考虑除数为0情况,且由于题目不允许使用除法...*方法1、乘积结果=当前数左边乘积(前缀)当前数右边乘积(后缀) 由于结果值为当前值之外乘积,所以可以利用2个数组来记录当前值左侧乘积和当前值右侧乘积,两个乘积结果再进行一次对应位置相乘即为排除当前位置数所有元素乘积

35710

【LeetCode热题100】【数组自身以外数组乘积

自身以外数组乘积 - 力扣(LeetCode) 要找除开本身以外其他元素乘积,如果可以用除法的话,直接累积所有元素然后除以每个元素 不能用除法,可以用两个数组计算元素前缀乘积和后缀乘积,然后相乘即可...只能用一个输出数组的话,可以先用这个数组记录前缀累积,然后再用一个变量记录后缀累积,用前缀累积乘以后缀累积就是答案 class Solution { public: vector productExceptSelf...(vector &nums) { vector ans(nums.size()); ans[0] = 1; for (int i =...1; i < nums.size(); ++i) ans[i] = ans[i - 1] * nums[i - 1]; int suffix = 1;...for (int i = nums.size() - 1; i >= 0; --i) { ans[i] = ans[i] * suffix; suffix

8810

01—自身以外数组乘积【LeetCode238】

题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...] 解题 思路: 计算除了当前索引中其它所有乘积,可以通过计算该索引下左边和右边乘积之和相乘即可。...首先遍历题给数组nums,分别计算题中数组每个索引左边所有乘积和右边所有乘积,放入两个数组L和R中,然后再新建一个数组result,对数组result进行一次遍历,数组result中每个索引处值等于数组...最后返回结果数组result。...,L第一个值为1,R最后一个值为1 L[0] = 1; R[nums.length-1] = 1; //填充L数组,即每个索引处左边乘积数组,第一个索引处值已经设置

12310

自身以外数组乘积

一、题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...题目数据 保证 数组 nums之中任意元素全部前缀元素和后缀乘积都在  32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...] 提示: 2 <= nums.length <= 10^5 -30 <= nums[i] <= 30 保证 数组 nums之中任意元素全部前缀元素和后缀乘积都在  32 位 整数范围内 三、解题思路...根据题目要求,我们需要计算出数组nums中,每个元素自己之外乘积值,即假设nums包含4个元素,分别为nums[0]~`nums[3]`,那么最终结果如下所示: nums[0] = nums[1]...进行计算操作: 【正向遍历数组】 这种遍历方式,我们可以来计算左下角数字乘积; 【逆向遍历数组】 这种遍历方式,我们可以来计算右上角数字乘积(用temp保存),然后与左下角再执行相乘操作; 好了,如上就是本题解题思路了

25920

leetcode刷题(118)——自身以外数组乘积

给你一个长度为 n 整数数组 nums,其中 n > 1返回输出数组 output ,其中 output[i] 等于 nums 中 nums[i] 之外其余各元素乘积。...题解: 我们不必将所有数字乘积除以给定索引处数字得到相应答案,而是利用索引左侧所有数字乘积和右侧所有数字乘积(即前缀与后缀)相乘得到答案。...方法一:左右乘积列表 1.初始化两个空数组 L 和 R。对于给定索引 i,L[i] 代表是 i 左侧所有数字乘积,R[i] 代表是 i 右侧所有数字乘积。...- 2; i >= 0; i--) { R[i] = nums[i + 1] * R[i + 1]; } // 对于索引 i, nums[i...算法 1.初始化 answer 数组,对于给定索引 i,answer[i] 代表是 i 左侧所有数字乘积。

26520

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

一、题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...<= 105 -30 <= nums[i] <= 30 保证 数组 nums之中任意元素全部前缀元素和后缀乘积都在 32 位 整数范围内 进阶:你可以在 O(1) 额外空间复杂度内完成这个题目吗...计算 ans[i] 下三角 各元素乘积,直接乘入 ans[i] 。 计算 ans[i] 上三角 各元素乘积,记为 tmp ,并乘入 ans[i] 。 返回 ans 。...补充: 见下图就知道了: 原数组: [1 2 3 4] 左部分乘积: 1 1 1*2 1*2*3 右部分乘积: 2*3...空间复杂度 O(1) : 变量 tmp 使用常数大小额外空间(数组 ans 作为返回值,不计入复杂度考虑)

12010

LeetCode每日一题之 自身以外数组乘积

. - 力扣(LeetCode) 算法原理: 这道题其实和我上一道题非常相似---寻找数组中心下标,也是使用前缀和思想,而这里需要改用前缀积: 所以我们创建前缀积数组f,后缀积数组g: f[i]表示...nums数组(0~(i-1))所有元素积。...(自身外前缀积)f[i]=f[i-1]*nums[i-1] g[i]表示nums数组((i+1)~(n-1))所有元素积。...(自身外后缀积) g[i]=g[i+1]*nums[i+1] 特殊位置处理: f[0]和g[n-1],这两个位置要特殊处理一下,f[0]表示数组nums 0号位之前元素积,可它之前没有元素,之前题目前缀和时我们都将它置为...0,但这里不同,如果还是置为0的话,因为0乘任何数都是0,就会导致整个前缀积数组都变成0,所以为了不让它对后面的元素产生影响,我们应该把它置为1,g[n-1]同理。

6610

C语言题解——自身以外数组乘积(力扣 第238题)

---- 前言   这是力扣题库中一个中等难题,说是存在一个整型数组,求出各元素位上除此数外其他元素乘积,比如存在数组[1,2,3,4],按照题目应该该输出[24,12,8,6],我们解题思想为:...空间开辟   我们会用到malloc函数进行动态内存开辟,这样无论它传过来多大数组,我们都可以得到足够空间(因为要返回这片空间,所以我们不进行内存释放) 关于题目中给定变量 *nums 就是指向原数组指针...具体代码实现 代码没有多少,就是赋值、开辟、判断 当然我们这里需要用块空间(因为其中包含了目标数组),所有我们不对其进行释放!...源码 下面是原码展示 //力扣 23.自身以外数组乘积 //左右互乘法 #include int* productExceptSelf(int* nums, int numsSize...自身以外数组乘积 - 力扣(LeetCode) 前面提到malloc标准相关网站为C Plus Plus,是一个国外网站,但访问速度不错,可惜全英文。

19210

2021-10-29:自身以外数组乘积。给你一个长度为

2021-10-29:自身以外数组乘积。...给你一个长度为 n 整数数组 nums,其中 n > 1返回输出数组 output ,其中 outputi 等于 nums 中 numsi 之外其余各元素乘积。示例:输入: 1,2,3,4。...提示:题目数据保证数组之中任意元素全部前缀元素和后缀(甚至是整个数组乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...( 出于对空间复杂度分析目的,输出数组不被视为额外空间。)力扣238。 答案2021-10-29: 方法1:先遍历求后缀基,再遍历求前缀基。 方法2:分三种情况。 2.1.数组中无。...将所有数就乘积,然后遍历,做除法。除法改成位运算,就符合题意了。 2.2.数组中有1。除了值为0位置数是其他数积,其他位置是0。 2.3.数组中有2个。结果全。 时间复杂度:O(N)。

29910

Excel公式练习45: 从矩阵数组返回满足条件所有组合数

关键是,参数cols固定为数组{0,1,2,3},显然意味着四个元素组合中每个都将分别来自四个不同列,然后变换传递给参数rows数组,即满足确保没有两个元素在同一行条件所有可能排列。...然而,我们不仅限于将一维数组传递给OFFSET函数:如果我们能够以某种方式生成一个数组,该数组由上述四个元素组成所有数组组成。...24行4列组成数组,其中每一行等于上面给出24种排列之一,然后将其传递给OFFSET函数,实现对所有24个数组同时处理。...虽然我们可以将诸如SMALL之类函数与其他一些函数例如LARGE、FREQUENCY或MODE.MULT一起使用,返回一个大小与传递给函数大小不同数组,但是通常根本没有必要将数组缩减到这样程度:...然后测试数组中每个元素是否都包含数字1、2、3、4: FIND({1,2,3,4},ROW(INDIRECT("1234:4321"))) 将产生一个3088行4列数组,其12352个元素将是对上述数组所有

3.3K10
领券