238. 除自身以外数组的乘积

devtools/2024/10/18 19:32:50/

文章目录

  • 1.题目
  • 2.思路
  • 3.代码


1.题目

238. 除自身以外数组的乘积

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

2.思路

计算每个元素左侧的乘积并存储在 left 数组中,计算的区间是0到i-1,数组所有元素初始化为1

计算每个元素右侧的乘积并存储在 right 数组中,计算的区间是i+1到n-1,数组所有元素初始化为1

通过将 leftright 数组对应位置的乘积赋值给结果数组 result,从而得到每个元素除自身以外的所有元素的乘积

注意,边界问题,left的第一个元素要初始化为1,right的最后一个元素要初始化为1

3.代码

#include <vector>class Solution {
public:std::vector<int> productExceptSelf(std::vector<int>& nums) {int n = nums.size();// 初始化左侧乘积数组,初始值为1std::vector<int> left(n, 1);// 初始化右侧乘积数组,初始值为1std::vector<int> right(n, 1);// 初始化结果数组std::vector<int> result(n);// 计算左侧乘积for (int i = 1; i < n; ++i) {// left[i] 存储的是 nums[i] 左侧所有元素的乘积left[i] = left[i - 1] * nums[i - 1];}// 计算右侧乘积for (int i = n - 2; i >= 0; --i) {// right[i] 存储的是 nums[i] 右侧所有元素的乘积right[i] = right[i + 1] * nums[i + 1];}// 计算结果数组for (int i = 0; i < n; ++i) {// result[i] 是 left[i] 和 right[i] 的乘积result[i] = left[i] * right[i];}return result;}
};


http://www.ppmy.cn/devtools/125342.html

相关文章

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…

C语言内存函数详解

文章目录 memcpy函数memmove函数memset函数memcmp函数 memcpy函数 void * memcpy ( void * destination, const void * source, size_t num );内存函数头文件是#include<string.h> 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这…

Docker镜像命令汇总笔记

1.Docker镜像 Docker 镜像是用于部署容器化应用的轻量级、可执行的软件包。它们包含了运行特定应用所需的所有内容&#xff0c;包括代码、运行时环境、系统工具、系统库和设置。Docker 镜像通过文件来实现不同层的分发&#xff0c;每一层对应Dockerfile中的一个指令&#xff0…

微信小程序的面试题

简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch() 区别 &#xff1f; wx.navigateTo() : 保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面 wx.redirectTo() : 关闭当前页面&#xff0c;跳转到应用内的…

C# 比较两个集合和比较对象

1、比较集合 /// <summary> /// 比较两个集合 /// </summary> /// <typeparam name"T"></typeparam> /// <param name"list1"></param> /// <param name"list2"></param> /// <returns>&…

消息队列面试题——第二篇

1. rocketmq、rabbitmq、kafka的区别 架构设计和消息模型 特性rocketmqrabbitmqkafka消息模型基于主题和消费组&#xff0c;支持发布/订阅和点对点两种模型基于队列模型&#xff0c;支持发布/订阅和点对点两种模型基于分区的主题模型&#xff0c;主要用于日志流式处理和高吞吐…

awk脚本通过将多行拼接成一行并在 SQL 语句的末尾遇到分号(;)时打印出来

concact_sql.awk 脚本如下 {if ($0 ~ /^SELECT|UPDATE|DELETE|INSERT/) {flag 1buffer ""gsub(/\n/, "", $0)cli $0} else if (flag) {if ($0 ~ /;/) {flag 0print cli buffer $0} else {buffer buffer $0}} else if (flag 0) {print $0} } 这个 aw…

position定位静态定位/绝对定位/相对定位

1.静态定位static&#xff1a;按照标准流进行布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>D…