news 2026/7/9 16:22:03

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 16:21:07

流感病毒治疗靶标HA

流感A病毒是负链RNA病毒&#xff0c;属于正黏液病毒科。它们的基因组由八段单链负链RNA片段组成&#xff0c;编码10种必需蛋白质。血凝素&#xff08;Hemagglutinin&#xff0c;HA&#xff09;是流感病毒最重要的和最丰富的表面糖蛋白&#xff0c;已经鉴定出或检测到18种不同的…

作者头像 李华
网站建设 2026/7/9 16:19:03

I2C与SPI协议深度对比:从4个维度实测STM32驱动OLED屏性能

I2C与SPI协议深度对比&#xff1a;从4个维度实测STM32驱动OLED屏性能在嵌入式开发中&#xff0c;选择合适的通信协议往往能决定项目的成败。面对同一块0.96寸OLED显示屏&#xff0c;I2C和SPI两种协议展现出截然不同的特性。本文将通过实测数据&#xff0c;从通信速率、CPU占用率…

作者头像 李华
网站建设 2026/7/9 16:17:34

基于TB6593FNG与PIC32的直流电机控制系统设计

1. 项目背景与核心器件选型在工业自动化和精密控制领域&#xff0c;直流电机因其优异的调速性能和转矩特性一直是关键执行元件。这次我们要探讨的是基于TB6593FNG驱动芯片和PIC32MX675F256L微控制器的定制化直流电机控制系统&#xff0c;这个组合特别适合需要高动态响应和精确位…

作者头像 李华
网站建设 2026/7/9 16:14:42

Day18 | Agentic RAG——让模型自己决定查不查、查什么、查几次

苦猿的大模型日记 Day18 Agentic RAG——让模型自己决定查不查、查什么、查几次-帮普通人把AI学进简历系列前言&#xff1a;同一个问题&#xff0c;普通 RAG 答不上来用户问&#xff1a;"你们家 X3 和 X5 这两款扫地机&#xff0c;哪款更适合养猫的家庭&#xff1f;&quo…

作者头像 李华
网站建设 2026/7/9 16:12:15

TDA7468与PIC18F56K42构建高效音频处理系统

1. 项目概述&#xff1a;音频处理系统的硬件核心在音频处理领域&#xff0c;TDA7468音频处理器与PIC18F56K42微控制器的组合堪称黄金搭档。TDA7468是意法半导体(ST)推出的专业音频处理芯片&#xff0c;具有多通道输入选择、音量控制、音调调节等丰富功能&#xff1b;而PIC18F56…

作者头像 李华