当前位置: 首页 > article >正文

LeetCode 力扣 热题 100道(二十七)除自身以外数组的乘积(C++)

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

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

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

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> answer(n, 1);

        // 计算前缀积
        int prefix = 1;
        for (int i = 0; i < n; ++i) {
            answer[i] = prefix;  // 当前元素的前缀积
            prefix *= nums[i];  // 更新前缀积
        }

        // 计算后缀积并更新答案
        int suffix = 1;
        for (int i = n - 1; i >= 0; --i) {
            answer[i] *= suffix;  // 乘以当前元素的后缀积
            suffix *= nums[i];  // 更新后缀积
        }

        return answer;
    }
};

前缀积

遍历数组,计算每个元素的左侧所有元素的乘积。

存储在 answer[i] 中。

后缀积

反向遍历数组,计算每个元素右侧所有元素的乘积。

将后缀积与 answer[i] 相乘,得到结果。

优化空间

在同一个数组 answer 中存储前缀积和最终结果,避免额外空间分配。


http://www.kler.cn/a/463640.html

相关文章:

  • 设计心得——流程图和数据流图绘制
  • Linux Red Hat 7.9 Server安装GitLab
  • Formality:官方Tutorial(一)
  • 微信小程序获取后端数据
  • 数据挖掘——聚类
  • STLG_01_05_程序设计C语言 - 数据类型概念解析
  • CMS漏洞靶场攻略
  • Kubernetes第二天
  • JavaScript的diff库详解(示例:vue项目实现两段字符串比对标黄功能)
  • 一文读懂:区块链的原理、技术、应用领域
  • 大型语言模型在金融市场中的预测能力
  • [AI] 深度学习的“黑箱”探索:从解释性到透明性
  • 管理员登录 Ubuntu 图形界面失败
  • Windows提示错误wmvcore.dll缺失要怎么解决?
  • 【每日学点鸿蒙知识】初始化BigInt、包体积瘦身、Tabs嵌套Grid、老年化适配、Release打包失败
  • 【Oracle】数据库 安装与【Qt】驱动编译与连接
  • Navicat和MySQL的安装
  • 在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示
  • Linux之ARM(MX6U)裸机篇----4.C语言LED驱动实验
  • 基础的基础之 pillow与opencv相比的特点与优缺点比较
  • 【从零开始入门unity游戏开发之——C#篇39】C#反射使用——Type 类、Assembly 类、Activator 类操作程序集
  • 如何利用java爬虫获得AMAZON商品详情
  • 基于 Python 的人脸识别景区票务识别系统
  • 使用Qt中的模型视图框架
  • 【Rust自学】9.1. 不可恢复的错误以及panic!
  • 180天Java项目学习路线指引