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

除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...对于给定索引 iii,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们更加具体的描述这个算法。 算法     初始化两个空数组 L 和 R。...对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积。     我们需要用两个循环来填充 L 和 R 数组的值。...当 R 和 L 数组填充完成,我们只需要在输入数组上迭代,且索引 i 处的值为:L[i] * R[i]。

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

    除自身以外数组的乘积

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

    33120

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

    可以先计算给定数组所有元素的乘积,然后对数组中的每个元素 x,将乘积除以 x 求得除自身值以外的数组乘积。 然后这样的解决方法有一个问题,就是如果输入数组中出现 0,那么这个方法就失效了。...这增加了这个问题的难度。 4.1 暴力 遍历数组中的每一个元素,将当前元素之外的元素依次相乘,然后写到结果数组。...时间复杂度: O(n),其中 n 指的是数组 nums 的长度。预处理 L 和 R 数组以及最后的遍历计算都是 O(n) 的时间复杂度。...构造方式与之前相同,只是我们试图节省空间,先把 answer 作为方法一的 L 数组。 这种方法的唯一变化就是我们没有构造 R 数组,而是用一个变量来表示右边元素的乘积。...除自身以外数组的乘积 - LeetCode

    14410

    除自身以外数组的乘积

    题目 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。...当 R 和 L 数组填充完成,我们只需要在输入数组上迭代,且索引 i 处的值为:L[i] * R[i]。...预处理 L 和 R 数组以及最后的遍历计算都是 O(N) 的时间复杂度。 空间复杂度:O(N),其中 N 指的是数组 nums 的大小。...使用了 L 和 R 数组去构造答案,L 和 R 数组的长度为数组 nums 的大小。 算法二:共享数组方式 整体思路和官方解题思路相同:左乘*右乘。

    34610

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

    # LeetCode-238-除自身以外数组的乘积 题目来自于力扣https://leetcode-cn.com/problems/product-of-array-except-self 给你一个长度为...n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...最基本的方法是使用2个数组进行左右乘积的存储,最后需要再次遍历一遍数组进行乘积合并,时间和空间复杂度均为O(N)。...方法2、进阶优化: 题目规定存储答案的数组不算空间,所以进阶方法尝试能不能用一个答案数组就可以完成上面三个数组的操作。...我们可以发现,res数组其实在最后一轮才使用,所以我们很自然的想到res可以直接替换掉leftDot数组,用res数组乘以rightDot一样能够得到结果,节省了leftDot前缀数组的空间,但是这仍然使用到了

    37610

    字符数组反转_字符数组的初始化

    大家好,又见面了,我是你们的朋友全栈君。 关于字符串的反转,倒是很简单,但是编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。...不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。...示例 1: 输入:[“h”,“e”,“l”,“l”,“o”] 输出:[“o”,“l”,“l”,“e”,“h”] 开辟新的字符数组空间倒是简单的很,如下 class sad{ public char...,但是如何才能不开辟新的数组呢 class sad{ public char [] yoyo (char [] a ){ int q=a.length; for...,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

    1.1K10

    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数组,即每个索引处右边的乘积的数组

    13210

    除自身以外数组的乘积

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

    29620

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

    给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...预处理 L 和 R 数组以及最后的遍历计算都是 O(N) 的时间复杂度。 空间复杂度:O(N),其中 N 指的是数组 nums 的大小。...使用了 L 和 R 数组去构造答案,L 和 R 数组的长度为数组 nums 的大小。...方法二:空间复杂度 O(1)的方法 由于输出数组不算在空间复杂度内,那么我们可以将 L 或 R 数组用输出数组来计算。先把输出数组当作 L 数组来计算,然后再动态构造 R 数组得到结果。...2.构造方式与之前相同,只是我们试图节省空间,先把 answer 作为方法一的 L 数组。 3.这种方法的唯一变化就是我们没有构造 R 数组。而是用一个遍历来跟踪右边元素的乘积。

    27120

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

    一、题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度内完成此题。...( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。) 二、题解 思路与算法: 本题的难点在于 不能使用除法 ,即需要 只用乘法 生成数组 ans 。...分别迭代计算下三角和上三角两部分的乘积,即可不使用除法就获得结果。 下图中 A=nums , B=ans。 流程: 初始化:数组 ans ,其中 ans[0]=1 ;辅助变量 tmp=1 。...补充: 见下图就知道了: 原数组: [1 2 3 4] 左部分的乘积: 1 1 1*2 1*2*3 右部分的乘积: 2*3

    13210

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

    7410

    字符数组初始化问题解法_字符数组和字符串的区别

    在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。...如果数组的size非常大,那么前两种方式将会造成很大的开销。 所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第3种方式来初始化字符串数组。...当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。...如果要初始化一个字符串”hello”,那为它定义的数组至少有6个数组元素。   ...例如,下面的代码给数组初始化,但会引起不可预料的错误:     char array[5]=”hello”;   该代码不会引起编译错误,但由于改写了数组空间以外的内存单元,所以是危险的。

    60220

    java字符串转数组的方法(Java数组转为字符串的函数)

    可能大家都希望字符串直接转成char型的数组吧,因为很多时候要将数字型的字符串进行升降序,而 java降序的方法好像只能对char型的数组降序; 字符串转Char型数组: // 朱茂强 QQ:896228072...,逗号不会被存到数组里,0存到arr[0],12存到arr[1],3存到arr[2] String arr[] = str.split("");//将字符串中所有字符都存到数组里,0,12,3代表一个元素...,存到arr[0]中 System.out.println(Arrays.toString(arr)); //[0, 12, 3] 注意这里输出的是元素在数组中的存储结果,逗号代表分割,不是元素...} } 总结:一般情况下都用char arr[]=str.toCharArray();将数字型的字符串转char型数组,因为后期排序啥的比较方便。...若要是字符型的字符串就用String arr[] = str.split(“//,”); 转成String型数组,因为char型一次只能存储一个字符。

    2.9K10
    领券