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

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

可以先计算给定数组所有元素乘积,然后对数组每个元素 x,将乘积除以 x 求得自身值以外数组乘积。 然后这样解决方法有一个问题,就是如果输入数组中出现 0,那么这个方法就失效了。...时间复杂度: O(n^2),需要两层遍历,第一层为遍历数组每一个元素,第二层是遍历数组当前元素其他所有元素。 空间复杂度: O(1)。...length 指的是输入数组大小。其他元素:R[i]=R[i+1]*nums[i+1]。 当 R 和 L 数组填充完成,我们只需要在输入数组迭代,且索引 i 处值为:L[i]*R[i]。...构造方式与之前相同,只是我们试图节省空间,先把 answer 作为方法一 L 数组。 这种方法唯一变化就是我们没有构造 R 数组,而是用一个变量来表示右边元素乘积。...自身以外数组乘积 - LeetCode

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

    自身以外数组乘积

    题目: 给你一个长度为 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

    33020

    自身以外数组乘积

    题目 给你一个长度为 n 整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中 nums[i] 之外其余各元素乘积。...示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素全部前缀元素和后缀(甚至是整个数组乘积都在 32 位整数范围内。...我们需要用两个循环来填充 L 和 R 数组值。对于数组 L,L[0] 应该是 1,因为第一个元素左边没有元素。对于其他元素:L[i] = L[i-1] * nums[i-1]。...当 R 和 L 数组填充完成,我们只需要在输入数组迭代,且索引 i 处值为:L[i] * R[i]。...使用了 L 和 R 数组去构造答案,L 和 R 数组长度为数组 nums 大小。 算法二:共享数组方式 整体思路和官方解题思路相同:左乘*右乘。

    34310

    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个数组来记录当前值左侧乘积和当前值右侧乘积,两个乘积结果再进行一次对应位置相乘即为排除当前位置数所有元素乘积

    37010

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

    题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...题目数据 保证 数组 nums之中任意元素全部前缀元素和后缀乘积都在 32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...首先遍历题给数组nums,分别计算题中数组每个索引左边所有数乘积和右边所有数乘积,放入两个数组L和R中,然后再新建一个数组result,对数组result进行一次遍历,数组result中每个索引处值等于数组...,L第一个值为1,R最后一个值为1 L[0] = 1; R[nums.length-1] = 1; //填充L数组,即每个索引处左边乘积数组,第一个索引处值已经设置...for(int i=1;i< nums.length;i++){ L[i] = nums[i-1]*L[i-1]; } //填充R数组,即每个索引处右边乘积数组

    12710

    自身以外数组乘积

    一、题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...题目数据 保证 数组 nums之中任意元素全部前缀元素和后缀乘积都在  32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度内完成此题。... nums之中任意元素全部前缀元素和后缀乘积都在  32 位 整数范围内 三、解题思路 根据题目要求,我们需要计算出数组nums中,每个元素自己之外乘积值,即假设nums包含4个元素,分别为nums...所以,为了解决这个问题,我们可以看下面这个图,在这个图中白色格子表示不参与计算,那么正好可以分割为左下角和右上角两部分数字集合,具体情况请见下图所述: 图片 针对上面的分析,我们可以分为两部分对数组nums...进行计算操作: 【正向遍历数组】 这种遍历方式,我们可以来计算左下角数字乘积; 【逆向遍历数组】 这种遍历方式,我们可以来计算右上角数字乘积(用temp保存),然后与左下角再执行相乘操作; 好了,如上就是本题解题思路了

    27820

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

    给你一个长度为 n 整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中 nums[i] 之外其余各元素乘积。...2.我们需要用两个循环来填充 L 和 R 数组值。对于数组 L,L[0] 应该是 1,因为第一个元素左边没有元素。对于其他元素:L[i] = L[i-1] * nums[i-1]。...4.当 R 和 L 数组填充完成,我们只需要在输入数组迭代,且索引 i 处值为:L[i] * R[i]。...2.构造方式与之前相同,只是我们试图节省空间,先把 answer 作为方法一 L 数组。 3.这种方法唯一变化就是我们没有构造 R 数组。而是用一个遍历来跟踪右边元素乘积。...分析与方法一相同。 空间复杂度:O(1),输出数组不算进空间复杂度中,因此我们只需要常数空间存放变量。

    26720

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

    一、题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中 nums[i] 之外其余各元素乘积 。...题目数据 保证 数组 nums之中任意元素全部前缀元素和后缀乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度内完成此题。...nums之中任意元素全部前缀元素和后缀乘积都在 32 位 整数范围内 进阶:你可以在 O(1) 额外空间复杂度内完成这个题目吗?...分别迭代计算下三角和上三角两部分乘积,即可不使用除法就获得结果。 下图中 A=nums , B=ans。 流程: 初始化:数组 ans ,其中 ans[0]=1 ;辅助变量 tmp=1 。...计算 ans[i] 下三角 各元素乘积,直接乘入 ans[i] 。 计算 ans[i] 上三角 各元素乘积,记为 tmp ,并乘入 ans[i] 。 返回 ans 。

    12710

    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]同理。

    6910

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

    ---- 前言   这是力扣题库中一个中等难题,说是存在一个整型数组,求出各元素位上除此数外其他元素乘积,比如存在数组[1,2,3,4],按照题目应该该输出[24,12,8,6],我们解题思想为:...下面来看看具体讲解吧: ---- 正文   前面提到过,我们需要得到左积与右积,已知第一个元素左积为1,最后一个元素右积也为1,随着元素变化,积数也会发生变化,因此我们可以以此作为突破点,当然我们要先创建一个数组...,可以通过它偏移访问到原数组中不同元素 numsSize 是原数组长度(个数) *returnSize 是我们目标数组长度指针,因为0也会放入目标数组中,因此我们两个数组长度都是一样,这里直接赋值即可...源码 下面是原码展示 //力扣 23.自身以外数组乘积 //左右互乘法 #include int* productExceptSelf(int* nums, int numsSize...自身以外数组乘积 - 力扣(LeetCode) 前面提到malloc标准相关网站为C Plus Plus,是一个国外网站,但访问速度不错,可惜全英文。

    24110

    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)。 额外空间复杂度:O(1)。 代码用golang编写。

    31010

    手撕numpy(四):数组广播机制、数组元素底层存储

    "翻译如下" 为了更够广播,进行操作两个数组尾部维度必须相同,或者其中一个数组尾部维度是1。...概念:广播(Broadcast)是numpy对不同形状(shape)数组,进行数值计算方式,对数组算术运算通常在相对应元素上进行。...注意:不同形状数组元素之间进行数值计算,会触发广播机制;同种形状数组元素之间,直接是对应元素之间进行数值计算。...② 标量和一维、二维、三维数组之间广播运算 ? ③ 一维数组和二维数组之间广播运算 ? ⑤ 二维数组和三维数组元素之间广播运算 ? 3)图示说明:什么样数据才可以启用广播机制?...原因是:numpy底层是集成了C语言,因此numpy数组元素底层存储也就是“C风格”,下面我们来对这种风格进行说明。

    1.2K30
    领券