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

LeetCode238:乘积除自身的高效解法

LeetCode238

给你一个整数数组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]

Python解法

1.双数组

class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: length = len(nums) L, R, res = [0]*length, [0]*length, [0]*length L[0] = 1 for i in range(1, length): L[i] = nums[i - 1] * L[i - 1] R[length - 1] = 1 for i in reversed(range(length - 1)): R[i] = nums[i + 1] * R[i + 1] for i in range(length): res[i] = L[i] * R[i] return res

2.优化

class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: n = len(nums) res = [1] * n # 左指针:计算左侧乘积 left = 1 for i in range(n): res[i] = left left *= nums[i] # 右指针:计算右侧乘积并相乘 right = 1 for j in range(n - 1, -1, -1): res[j] *= right right *= nums[j] return res

Java解法

1.双数组

class Solution { public int[] productExceptSelf(int[] nums) { int len = nums.length; int[] L = new int[len]; int[] R = new int[len]; int[] res = new int[len]; L[0] = 1; for(int i = 1; i < len; i++){ L[i] = nums[i - 1] * L[i - 1]; } R[len - 1] = 1; for(int i = len - 2; i >= 0; i--){ R[i] = nums[i + 1] * R[i + 1]; } for(int i = 0; i < len; i++){ res[i] = L[i] * R[i]; } return res; } }

2.优化

class Solution { public int[] productExceptSelf(int[] nums) { int len = nums.length; int[] res = new int[len]; int left = 1; for(int i = 0; i < len; i++){ res[i] = left; left *= nums[i]; } int right = 1; for(int i = len - 1; i > -1; i--){ res[i] *= right; right *= nums[i]; } return res; } }

C++解法

1.双数组

#include <vector> using namespace std; class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int length = nums.size(); vector<int> L(length, 0); vector<int> R(length, 0); vector<int> res(length, 0); L[0] = 1; for (int i = 1; i < length; ++i) { L[i] = nums[i - 1] * L[i - 1]; } R[length - 1] = 1; for (int i = length - 2; i >= 0; --i) { R[i] = nums[i + 1] * R[i + 1]; } for (int i = 0; i < length; ++i) { res[i] = L[i] * R[i]; } return res; } };

2.优化

#include <vector> using namespace std; class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int n = nums.size(); vector<int> res(n, 1); int left = 1; for (int i = 0; i < n; ++i) { res[i] = left; left *= nums[i]; } int right = 1; for (int j = n - 1; j >= 0; --j) { res[j] *= right; right *= nums[j]; } return res; } };
http://www.cnnetsun.cn/news/3245210.html

相关文章:

  • 流感病毒治疗靶标HA
  • I2C与SPI协议深度对比:从4个维度实测STM32驱动OLED屏性能
  • 基于TB6593FNG与PIC32的直流电机控制系统设计
  • Day18 | Agentic RAG——让模型自己决定查不查、查什么、查几次
  • TDA7468与PIC18F56K42构建高效音频处理系统
  • 【小白也能轻松玩转龙虾】OpenClaw v2.7.9 虾壳云一键部署 (附最新安装包)
  • 超低功耗设计:NBM7100A与STM32F723ZE的电源管理优化
  • C++协议分析器实战:从抓包到解码的网络流量解析
  • 74LS112 JK 触发器设计 4 位同步计数器:Quartus II 仿真与毛刺分析
  • 如何快速部署Postman便携版:Windows系统免安装API测试终极指南
  • RT-Thread 5.0.2 DAC 驱动框架解析:HAL 库对接与 2 种使用模式对比
  • d2s-editor深度解析:揭秘暗黑2存档编辑器的二进制魔法与可视化哲学
  • 短距离隔墙遥控总失灵?从射频底层拆解433MHz Sub-GHz的穿墙技术逻辑
  • 零工配送从业者定向网络钓鱼攻击机理与多层智能防御体系研究
  • 直流负载管理优化:继电器选型与MCU控制实践
  • 如何快速定制专属机械键盘:Cherry MX键帽3D打印完整指南 [特殊字符]
  • 单调栈、单调队列(模板)、子矩阵(模板)
  • 如何快速掌握FModel:虚幻引擎游戏资产浏览器的终极指南
  • Dism++系统优化完整指南:从C盘爆满到性能飞跃的终极解决方案
  • 用Python处理大数据:高效编程技巧分享
  • SpireCV-Pro 1.0 正式发布:x86 免费、浏览器调试、仿真评测一体
  • C++ WebSocket服务实战:基于WebSocket++与Asio构建高性能实时通信后端
  • Blender智能重拓扑革命:QRemeshify深度解析与实战指南
  • AppData目录能不能清理?Roaming、Local、LocalLow该怎么区分处理
  • C++高级特性实战:RAII、移动语义与并发编程深度解析
  • Docker Compose 部署极狐GitLab 17.10:3步完成高可用CI/CD环境搭建
  • STM32与ISOM8710构建5kV高压隔离系统设计指南
  • WotoHub达人项目复盘表应该记录哪些数据?
  • 矩估计方法实战:从指数分布到均匀分布的3个参数估计案例详解
  • TB6593FNG与PIC18F65K40的直流电机控制方案