力扣238:除自身之外数组的乘积

力扣238:除自身之外数组的乘积

题目

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

思路

除自身之外的数组的乘积其实不就是左边全部的数相乘再乘上右边全部的数吗,这不是就是前缀和后缀的思想。所以我们直接构造两个数组当作前缀乘和后缀乘 。只是要注意 前缀乘的第一个位置和后缀乘的最后一个位置要设为1。这样才能继续下去。我们使用三次循环分别求得前缀乘,后缀乘和答案数组。

代码

cpp 复制代码
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> left(nums);
        vector<int> right(nums);
        left[0] = 1;
        right[n-1] = 1;
        vector<int> res(n,1);
        for(int i = 1;i < n;i++)
        {
            left[i] = left[i-1] * nums[i-1];
        }
        for(int i = n-2;i >=0;i--)
        {
            right[i] = right[i+1] *nums[i+1];
        }
        for(int i = 0;i < n;i++)
        {
            res[i] = left[i] * right[i];
        }
        return res;

        
    }
};
相关推荐
pusue_the_sun25 分钟前
C语言强化训练(1)
c语言·开发语言·算法
一支鱼4 小时前
leetcode-2-两数相加
算法·leetcode·typescript
island13144 小时前
【Redis#7】Redis 数据结构 -- Set 类型
java·数据结构·redis
斯坦索尼5 小时前
关于 01 背包问题的简单解释,理解状态转移与继承的相似性
算法·01背包问题
学涯乐码堂主5 小时前
《信息学奥林匹克辞典》中的一个谬误
数据结构·c++·算法·青少年编程·排序算法·信奥·gesp 考试
一匹电信狗6 小时前
【C++】C++11新特性第一弹(列表初始化、新式声明、范围for和STL中的变化)
服务器·开发语言·c++·leetcode·小程序·stl·visual studio
我叫黑大帅7 小时前
从奶奶挑菜开始:手把手教你搞懂“TF-IDF”
人工智能·python·算法
傻豪8 小时前
【Hot100】贪心算法
算法·贪心算法
笨笨的摸索8 小时前
变量在静态与动态类型语言中的区别
数据结构·经验分享
黑色的山岗在沉睡8 小时前
LeetCode 3665. 统计镜子反射路径数目
算法·leetcode·职场和发展