力扣热门100题之除自身意外数组的成绩【中等】

news2025/4/6 5:20:01

题目描述

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

提示:

在这里插入图片描述


解法1 总积法

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    let multRes=1;
    let isZero=false;
    nums.forEach((v)=>{
        if(v!=0){
            multRes*=v;
        }else{
            isZero=true;
        }
    })
    let res=[]
    if(isZero){
        for(let i=0;i<nums.length;i++){
            if(nums[i]==0){
                nums[i]=1
                if(nums.indexOf(0)!=-1){
                    res.push(0);
                }else{
                    res.push(multRes);
                }
                nums[i]=0;
            }else{
                res.push(0);
            }
        }
    }else{ 
        nums.forEach((v)=>{
            res.push(multRes/v);
        })
    }
    return res;
};

执行结果
在这里插入图片描述

解法2 左右乘积列表

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    let l=[1]
    let r=[]
    r[nums.length-1]=1
    const len=nums.length;
    for(let i=1;i<len;i++){
        l[i]=l[i-1]*nums[i-1];
        r[len-1-i]=r[len-i]*nums[len-i]
    }
    let res=[]
    for(let i=0;i<len;i++){
        res[i]=l[i]*r[i]
    }
    return res;
};

执行结果:
在这里插入图片描述

左右乘积列表优化

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    let l=[1] //l[i] 表示i左侧所有元素的乘积
    const len=nums.length;
    let r=1;//r为左侧的乘积
    for(let i=1;i<len;i++){
        l[i]=l[i-1]*nums[i-1];
    }
    for(let i=len-1;i>=0;i--){
        l[i]=l[i]*r;
        r*=nums[i];
    }
   
    return l;
};

执行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle 迁移 Hive 过程中遇到的问题总结

前言 最近一个小伙伴在做从 Oracle 到 Hive 的业务迁移工作,在迁移过程中属实遇到了一些坑,今天就来汇总一下这些坑,避免以后大家其他业务迁移的时候再出现类似的问题,即使出现了也可以拿过来进行对照解决。 问题1:Distinct window functions are not supported: count(…

matlab二维图形的绘制(1)

概述 matlab数学计算中有时候需要将函数通过图形更加直观的展示给用户的时候就需要使用到二维绘图。绘图常常采用的绘图命令便是 plot &#xff0c;再添加一些辅助命令使得图形更加的形象直观。 二维绘图中也包括针状图&#xff0c;阶梯图&#xff0c;散点图&#xff0c;条形图…

Emacs之实现跨程序选中自动复制功能(一百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

阿里云服务器配置 内存,cpu等等

实例升配&#xff0c;https://help.aliyun.com/document_detail/25438.html?spma2c4g.11174283.6.780.2cbf4c070oeino#title-a5t-gg2-

分布式文件存储与数据缓存 Redis高可用分布式实践(上)

一、Reids概述 1.1 为什么要使用NoSQL 单机Mysql的美好年代 在90年代&#xff0c;一个网站的访问量一般都不大&#xff0c;用单个数据库完全可以轻松应付。在那个时候&#xff0c;更多的都是静态网页&#xff0c;动态交互类型的网站不多。 遇到问题&#xff1a; 随着用户数的…

异构线程池的c++实现方案

概要 通常线程池是同质的&#xff0c;每个线程都可以执行任意的task&#xff08;每个线程中的task顺序执行&#xff09;&#xff0c;如下图所示&#xff1a; 但本文所介绍的线程和task之间有绑定关系&#xff0c;如A task只能跑在A thread上&#xff08;因此称为异构线程池&am…

《脱离“一支笔、一双手、一道力扣”困境的秘诀》:突破LeetCode难题的五个关键步骤

导言&#xff1a; 在解决LeetCode等编程题时&#xff0c;不少人会陷入“一支笔、一双手、一道力扣&#xff08;LeetCode&#xff09;做一宿”的困境。尽管已经掌握了相关知识和算法&#xff0c;但在实际挑战中却无从下手。本文将分享如何摆脱这一困境的秘诀&#xff0c;让你在面…

Java带符号右移(>>)、不带符号右移(>>>)

Java的右移涉及带符号右移&#xff08;>>&#xff09;、不带符号右移&#xff08;>>>&#xff09;。 对于正数&#xff0c;因为符号位是0&#xff0c;带符号右移和不带符号右移左侧都用0填充&#xff0c;所以结果相同。 对于负数&#xff0c;因为符号位是1&…

python + requests实现的电商API接口自动化框架详细教程

1、首先&#xff0c;我们先来理一下思路。 正常的电商接口测试流程是什么&#xff1f; 脑海里的反应是不是这样的&#xff1a; 确定测试接口的工具 —> 配置需要的接口参数 —> 进行测试 —> 检查测试结果&#xff08;有的需要数据库辅助&#xff09; —> 生成测…

第一节:我用Python论证移动平均线(MA)真的靠谱吗?

视频地址&#xff1a;点我查看文章配套视频 什么是MA 所谓“移动平均线”是指一段时间内股票价格的算术平均线&#xff0c;通常以收盘价作为计算值。它是一种趋向类技术指标。 在证券投资中&#xff0c;要赚钱无非是降低成本、提高收入&#xff0c;以期获得较高利润&#xff0…

内存泄漏是什么?有什么危害

内存泄漏是什么&#xff1f;有什么危害 1. 前言1.内存泄漏是什么&#xff1f;2. 为什么会发生内存泄漏3. 内存泄漏的危害4. 总结 1. 前言 在各种项目开发中&#xff0c;内存泄漏是一个很严重的问题。对资源管理、性能优越、系统稳定性&#xff0c;以及是否安全产生极大印象。本…

Seaborn库绘制单变量分布和双变量分布

Matplotlib虽然已经是比较优秀的绘图库了&#xff0c;但是它有个今人头疼的问题&#xff0c;那就是API使用过于复杂&#xff0c;它里面有上千个函数和参数&#xff0c;属于典型的那种可以用它做任何事&#xff0c;却无从下手。 Seaborn基于 Matplotlib核心库进行了更高级的API…

1-Linux的目录结构

Linux的目录结构是规定好的&#xff0c;不可以随意进行更改&#xff01; Linux的文件系统是采用级层式的树状目录结构&#xff0c;最上层是根目录–/&#xff0c;然后再在根目录下创建其它的目录。 各个目录中主要负责的功能和作用如下&#xff1a;&#xff08;主体的结构一定…

TypeScript入门学习汇总

1.快速入门 1.1 简介 TypeScript 是 JavaScript 的一个超集&#xff0c;支持 ECMAScript 6 标准。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大型应用&#xff0c;它可以编译成纯 JavaScript&#xff0c;编译出来的 JavaScript 可以运行在…

65英寸OLED透明屏的显示效果出色吗?

65英寸OLED透明屏是一种新型的显示技术&#xff0c;它采用有机发光二极管&#xff08;OLED&#xff09;作为显示元件&#xff0c;具有高亮度、高对比度、快速响应和广视角等优点。 与传统的液晶显示屏相比&#xff0c;OLED透明屏具有更高的透明度和更好的显示效果。 OLED透明屏…

VMPWN的入门级别题目详解(一)

实验一 VMPWN1 题目简介 这是一道基础的VM相关题目&#xff0c;VMPWN的入门级别题目。前面提到VMPWN一般都是接收字节码然后对字节码进行解析&#xff0c;但是这道题目不接受字节码&#xff0c;它接收字节码的更高一级语言&#xff1a;汇编。程序直接接收类似”mov”、”add”…

Python安装pip命令教程及更改镜像源

1、官方地址&#xff1a;地址 2、解压完成后&#xff0c;我们进入pip-23.2.1文件目录&#xff0c;找到setup.py&#xff0c;打开cmd进入此目录&#xff0c;或者在文件地址中输入cmd打开&#xff0c;输入以下命令&#xff1a; python setup.py install进l进行安装&#xff0c;安…

全网最全,Jmeter+Ant 接口自动化测试,从0到1精通实战...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 注&#xff1a;涉…

用友全版本任意文件上传漏洞复现

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 文章作者拥有对此文章的修改和解释权。如欲转载或传播此文章&#xff0c…

大数据技术之Hive1

目录标题 1、Hive基本概念1.1 定义1.2 优缺点1.3 Hive架构原理1.4 hive和数据库比较 2、Hive安装2.1 Hive 安装地址 1、Hive基本概念 1.1 定义 hive是基于hadoop的一个数据仓库工具&#xff0c;可以将结构化数据文件映射成一张表&#xff0c;并提供类SQL查询功能。 本质&…