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

LeetCode238_除自身以外数组的乘积

LeetCode238_除自身以外数组的乘积

  • 标签:#数组 #前缀和
  • Ⅰ. 题目
  • Ⅱ. 示例
  • 0. 个人方法一:暴力循环嵌套
  • 0. 个人方法二:前缀和后缀分别求积

标签:#数组 #前缀和

Ⅰ. 题目

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

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

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

Ⅱ. 示例

· 示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]

· 示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

0. 个人方法一:暴力循环嵌套

看到这题,第一想法就是先循环算所有数的乘积,然后再循环分别在每个位置上做个除法。但是题目直接就说不要使用除法。(我*****)(但这样也有道理:因为如果数组包含“0”的话就会有些问题)

于是我就想暴力循环了,对于每个位置都做一遍循环来计算结果。但这样时间复杂度太高了,达到了O(n2),于是它给我报了个RunTimeError。来大概看一下吧。

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int length = nums.size();vector<int> answer(length, 1);int MultiCount = 1;for (int i=0; i<length; i++){for (int j=0; j<length; j++){if (j != i){MultiCount *= nums[j];}}answer[i] = MultiCount;MultiCount = 1;}return answer;}
};

0. 个人方法二:前缀和后缀分别求积

在跟ChatGPT要了个思路(但没要代码)之后,它告诉我了这个前缀积+后缀积的方法。然后我猛拍大腿,我怎么没想到!于是自己实现了一下:

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int length = nums.size();vector<int> answer(length);answer[0] = 1;// 前缀乘积for (int i=1; i<length; i++){answer[i] = answer[i-1] * nums[i-1];}// 后缀乘积int MultiCount = 1;for (int i=length-2; i>=0; i--){MultiCount *= nums[i+1];answer[i] *= MultiCount;}return answer;}
};
  • 复杂度分析

    • 时间复杂度:O(N),其中 N 指的是数组 nums 的大小。分析与方法一相同。
    • 空间复杂度:O(1),输出数组不算进空间复杂度中,因此我们只需要常数的空间存放变量。
http://www.xdnf.cn/news/1617.html

相关文章:

  • 2025.5.4机器学习笔记:PINN文献阅读
  • React状态提升深度解析:原理、实战与最佳实践
  • 声音分离人声和配乐-从头设计数字生命第4课——仙盟创梦IDE
  • 树莓派安装GStreamer ,opencv支持, 并在虚拟环境中使用的安装方法
  • 从数据到智慧:解密机器学习的自主学习密码
  • springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【Python】Python在Linux上安装等操作流程以及注意事项| 基础知识
  • PTA -L1-001 Hello World
  • 项目班——0419——chrono时间库
  • VIC-3D非接触全场应变测量系统用于小尺寸测量之电子元器件篇—研索仪器DIC数字图像相关技术
  • 前端面经-JS篇(四)--回调地狱、promise异步编程、Proxy 与 Reflect 、模块化
  • JMeter 安装及使用 [软件测试工具]
  • 【数据分析实战】使用 Matplotlib 绘制玫瑰图
  • 什么是机器视觉3D碰撞检测?机器视觉3D碰撞检测是机器视觉3D智能系统中安全运行的核心技术之一
  • 使用 Docker 安装 SQL Server 2022 并解决 Navicat 连接问题
  • Linux漏洞管理:自动化扫描与补丁更新策略
  • 【软件设计师】模拟题一
  • 修改el-select背景颜色
  • wait_event 类接口详解
  • 题目:这不是字符串题
  • 数据库day-07
  • 晶振不集成到芯片内部的原因分析
  • BDO分厂开展地沟“大清肠”工作
  • Spring boot 中的IOC容器对Bean的管理
  • 【Python笔记 04】输入函数、转义字符
  • 【一次成功!】Ubuntu22.04 安装 Autoware、 cuda、 cudnn、 TensorRT
  • 力扣hot100 91-100记录
  • 面试题:Redis 一次性获取大量Key的风险及优化方案
  • 真.从“零”搞 VSCode+STM32CubeMx+C <1>构建
  • simsun.ttf simsun.ttc