【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组

简介: 【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组

📍前言

🕺作者: 迷茫的启明星


学习路线

C语言从0到1

C++初阶

数据结构从0到1

😘欢迎关注:👍点赞🙌收藏✍️留言


🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!


持续更新中~


[【前缀和】238. 除自身以外数组的乘积 剑指 Offer 66. 构建乘积数组

](https://leetcode.cn/problems/product-of-array-except-self/description/)


注:两个题目一样


问题描述

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


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


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


思路分析

首先,创建一个与输入数组 nums 大小相同的空数组 answer,用于存储结果。接着,定义两个变量 left 和 right,分别表示当前元素左侧所有元素的乘积和右侧所有元素的乘积。初始值设为 1。


接下来,遍历数组 nums,对于每个元素 nums[i],将其左侧所有元素的乘积 left 乘到 answer[i] 上,然后将 nums[i] 乘到 left 上。同时,将其右侧所有元素的乘积 right 乘到 answer[n-1-i] 上,然后将 nums[n-1-i] 乘到 right 上。


遍历完成后,answer 数组中的每个元素 answer[i] 都是 nums 中除 nums[i] 之外其余各元素的乘积。最后返回 answer 数组。

题解与代码

这是一个求解给定数组中除自身元素之外其他元素乘积的问题。题目要求在 O(n) 时间复杂度内完成此题,且不能使用除法。以下是一种解题思路和代码实现。


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



总结

这道题主要考察了数组操作的技巧。通过维护两个变量 left 和 right 来记录当前元素左侧和右侧所有元素的乘积,避免了使用除法。同时,在 O(n) 时间复杂度内完成了题目要求。在实际编程过程中,要注意数组边界的处理,确保不出现数组越界等错误。


本文由mdnice多平台发布


相关文章
|
机器学习/深度学习 算法
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
59 0
|
6月前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
7月前
|
算法 测试技术 C++
【组合数学】【动态规划】【前缀和】1735生成乘积数组的方案数
【组合数学】【动态规划】【前缀和】1735生成乘积数组的方案数
|
7月前
|
存储 算法
算法题解-除自身以外数组的乘积
算法题解-除自身以外数组的乘积
|
7月前
|
存储 测试技术 索引
每日一题——除自身以外数组的乘积
每日一题——除自身以外数组的乘积
|
7月前
|
存储 人工智能 Java
每日一题《剑指offer》数组篇之构建乘积数组
每日一题《剑指offer》数组篇之构建乘积数组
48 0
每日一题《剑指offer》数组篇之构建乘积数组
|
7月前
|
BI
剑指 Offer 66:构建乘积数组
剑指 Offer 66:构建乘积数组
52 0
|
7月前
leetcode-238:除自身以外数组的乘积
leetcode-238:除自身以外数组的乘积
39 0
|
7月前
|
存储 BI
【剑指offer】-构建乘积数组-42/67
【剑指offer】-构建乘积数组-42/67
|
7月前
|
存储 算法 Java
【算法训练-数组 二】【元素组合】两数之和、三数之和
【算法训练-数组 二】【元素组合】两数之和、三数之和
55 0