【前缀和】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,用于存储结果。接着,定义两个变量 leftright,分别表示当前元素左侧所有元素的乘积和右侧所有元素的乘积。初始值设为 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) 时间复杂度内完成此题,且不能使用除法。以下是一种解题思路和代码实现。

C++ 复制代码
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;
    }
};

总结

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

本文由mdnice多平台发布

相关推荐
纵有疾風起2 分钟前
C++模版:模板初阶及STL简介
开发语言·c++·经验分享·开源
QT 小鲜肉8 分钟前
【个人成长笔记】Qt Creator快捷键终极指南:从入门到精通
开发语言·c++·笔记·qt·学习·学习方法
CHANG_THE_WORLD20 分钟前
switch语句在汇编层面的几种优化方式 ,为什么能进行优化
汇编·算法·switch·汇编分析·switch case·switch case 汇编·switch case 语句
勇闯逆流河20 分钟前
【C++】用红黑树封装map与set
java·开发语言·数据结构·c++
实心儿儿20 分钟前
C++——内存管理
c++
山,离天三尺三20 分钟前
深度拷贝详解
开发语言·c++·算法
Blossom.11829 分钟前
把AI“撒”进农田:基于极值量化与状态机的1KB边缘灌溉决策树
人工智能·python·深度学习·算法·目标检测·决策树·机器学习
一只鱼^_1 小时前
第 167 场双周赛 / 第 471 场周赛
数据结构·b树·算法·leetcode·深度优先·近邻算法·迭代加深
我狸才不是赔钱货1 小时前
容器:软件世界的标准集装箱
linux·运维·c++·docker·容器
云知谷1 小时前
【嵌入式基本功】单片机嵌入式学习路线
linux·c语言·c++·单片机·嵌入式硬件