【LeetCode-中等】238. 除自身以外数组的乘积(详解)

news2024/11/19 0:45:18

题目

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/product-of-array-except-self

方法1:左右数组

乘积 = 当前数左边的乘积 * 当前数右边的乘积

用left数组存储:left[i]表示从左侧下标为0 一直连续乘到i的结果

用right数组存储:right[i]表示从右侧下标为n-1 一直连续乘到i的结果

answer[i] = left[i-1] * right[i+1]

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int answer[] = new int[n];
        //left[i]表示从左侧下标为0 一直连续乘到i的结果
        int left[] = new int[n];
        //right[i]表示从右侧下标为n-1 一直连续乘到i的结果
        int right[] = new int[n];
        //初始化left 和 right
        left[0] = nums[0];
        right[n-1] = nums[n-1];
        //给 left数组赋值
        for (int i = 1; i < n; i++) {
            left[i] = left[i-1] * nums[i];
        }
        //给 right数组赋值
        for (int i = n-2; i >=0 ; i--) {
            right[i] = right[i+1] * nums[i];
        }
        //给answer数组赋值
        for (int i = 0; i < n; i++) {
            if (i==0) {
                answer[i] = right[i+1];
                continue;
            }
            if (i == n-1){
                answer[i] = left[i-1];
                continue;
            }
            answer[i] = left[i-1] * right[i+1];
        }
        return answer;
    }
}

效果不是很好,应该可以优化 

方法2:优化方法1

方法1中我们用了三次for循环,分别给 left 和 right 和 answer 数组赋值,实际上,我们可以在给ringht数组赋值的同时,给answer数组赋值,这样少用一次for循环,时间复杂度会降低。

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int answer[] = new int[n];
        //left[i]表示从左侧下标为0 一直连续乘到i的结果
        int left[] = new int[n];
        //right[i]表示从右侧下标为n-1 一直连续乘到i的结果
        int right[] = new int[n];
        //初始化left[0]、right[n-1]
        left[0] = nums[0];
        right[n-1] = nums[n-1];
        //给left数组赋值
        for (int i = 1; i < n; i++) {
            left[i] = left[i-1] * nums[i];
        }
        answer[n-1] = left[n-2];
        //给right数组赋值
        for (int i = n-2; i >=0 ; i--) {
            right[i] = right[i+1] * nums[i];
            if (i==0) {
                answer[i] = right[i+1];
                continue;
            }
            answer[i] = left[i-1] * right[i+1];
        }
        return answer;
    }
}

 

果然,降低了很多,nice,这道题作为一道中等难度的题,还是很好做的 

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

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

相关文章

vue 动态组件 render/jsx

需求 根据用户需求设定的动态呈现表单内容 刚开始 打算使用v-html使用,但是v-html 无法渲染组件&#xff0c;只能显示原生的dom,操作起来实在是不方便。查阅了之后&#xff0c;发现可以用render或者jsx实现【为了能作为Vue模板解析】。于是乎开启了我render之旅~ 使用 <tem…

基于JAVA的图书借阅管理平台【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427643 高校图书馆提倡“以人为本”的管理理念&#xff0c;从读者的角度出发&#xff0c;最大程度满足读者群体的文献资源需要。高校图书馆的管理理念和服务模式之间有着紧密的联系&#xff…

一键开启云原生网络安全新视界

本文作者&#xff1a;陈桐乐 李卓嘉 随着云原生的兴起&#xff0c;微服务、容器、kubernetes容器编排正在快速改变着企业软件架构的形态&#xff0c;单体架构、分布式架构、微服务架构&#xff0c;软件架构在持续演进的过程中&#xff0c;变得越来越复杂&#xff0c;管理和维护…

Qt QLabel文本框的使用

文章目录QLabel文本框的使用QLabel文本框的信号和槽实例演示QLabel文本框的用法已剪辑自: http://c.biancheng.net/view/vip_9653.html QLabel 是 Qt 帮我们写好的一个控件类&#xff0c;间接继承自 QWidget 类&#xff0c;它的继承关系如下&#xff1a; QLabel -> QFrame…

消防宣传科普|消防安全知识网上答题挑战赛活动方案

活动背景 为普及消防法律法规和消防安全知识&#xff0c;营造消防宣传月浓厚氛围。集团公司防火办通过“防火安全知识专项学习与竞答”小程序&#xff0c;开展“消防知识网上答题挑战赛”&#xff0c;提升全员消防安全意识&#xff0c;提高抗御火灾、自防自救和组织疏散能力。…

配置FTP站点操作步骤—图解

前提条件(已安装FTP服务器可忽略)&#xff1a; 点击WinR后在运行窗口中输入control&#xff0c;将打开控制面板&#xff0c;选择【程序】—【启动或关闭Windows功能】—点击【Internet Information Services】勾选【FTP服务器】—点击【确定】按钮按照即可。 1.点击WinR后在运…

数字集成电路设计(六、Verilog HDL高级程序设计举例)

文章目录1. 数字电路系统设计的层次化描述方式1.1 Bottom-Up 设计方法1.2 Top-Down 设计方法2. 典型电路设计2.1 加法器树乘法器2.1.1 改进为两级流水线4位加法器树乘法器2.2 Wallace 树乘法器2.3 复数乘法器2.4 FIR滤波器的设计2.5 存储器的设计2.6 FIFO的设计1. 数字电路系统…

Mac下,protoc-gen-go-grpc: program not found or is not executable问题的解决

一 问题来源 在公司的项目中,需要把对应的proto文件生成对应的pb文件,当执行protoc相关命令时,出现报错:protoc-gen-go-grpc: program not found or is not executable Please specify a program using absolute path or make sure the program is available in your PATH …

IDEA配置Tomcat,先报500错误,刷新后报404.

IDEA配置Tomcat&#xff0c;先报500错误&#xff0c;刷新后报404的解决方法.错误1&#xff1a;JDK的版本高于JRE的版本错误2&#xff1a;Tomcat版本与JDK版本不相符报错截图 错误1&#xff1a;JDK的版本高于JRE的版本 这也是我个人在配置过程中&#xff0c;导致无法配置成功的…

HTML旅游网页设计制作 DW旅游网站官网滚动网页 DIV旅游风景介绍网页设计与实现

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Transferrin-PEG-PMMA 转铁蛋白-聚乙二醇-聚甲基丙烯酸甲酯,F-PEG-PBA/PAE/PPS

产品名称&#xff1a;转铁蛋白-聚乙二醇-聚甲基丙烯酸甲酯 英文名称&#xff1a;Transferrin-PEG-PMMA 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、750、…

numpy数组索引、数组切片、数组形状修改、数组类型修改和数组去重

一、numpy数组索引、切片 直接进行索引&#xff0c;切片对象[:, :]&#xff1a;先行后列 代码如下 a np.array([[1, 2, 3], [11, 22, 33]]) # 二维数组 a[1, [0,1,2]] # 索引a np.array([[1, 2, 3], [11, 22, 33]]) # 二维数组 a[1, 0:3] # 切片a2 np.array([[[1,…

【Paper】2021_多智能体系统滞后一致性研究_马逸文

马逸文. 多智能体系统滞后一致性研究[D].西南民族大学,2021.DOI:10.27417/d.cnki.gxnmc.2021.000193. 文章目录第一章 绪论第三章 二阶离散线性多智能体系统滞后一致性3.5 数值仿真第一章 绪论 第三章 二阶离散线性多智能体系统滞后一致性 3.5 数值仿真 x0(k1)Ax0(k)v0(k)v0(…

脚本-抽取配置文件

要获取不同版本的下载链接需要通过三次点击才能进入到有下载链接的Html页&#xff0c;想写爬虫的话需要使用selenium去实现点击功能&#xff0c;然后这个网站比较乱&#xff0c;所以根据Xpath也不太好写&#xff08;可能得写好多异常处理&#xff09;&#xff0c;所以我选择手动…

数字化门店| 奶茶店智慧管理系统

奶茶如今已经成为年轻女性的常饮品&#xff0c;比如蜜雪冰城、奈雪的茶之类的品牌线下门店&#xff0c;门店量的庞大覆盖&#xff0c;使得每天都是人来人往&#xff0c;但碰上优惠活动日或节假日&#xff0c;很多人需要排很长的队才能买到&#xff0c;同时在店内坐的消费者如果…

[附源码]java毕业设计血库管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

网页期末作业 基于HTML+CSS中国传统节日【清明节】带论文8000字

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

关于python内置数据类型的小练习

文章目录练习-两数之和求不重复子串的长度练习-两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同…

Typescript 中根据某个字段判断其他字段是否必传

背景 我在使用 Typescript 的时候遇到过这样的一个问题。我有这样的一个组件 前面的两个搜索框是根据参数判断是否要隐藏的&#xff0c;Typescript 的类型定义就是这样的 type BasicItem {label: stringvalue: number } type BrandItem BasicItem & {}type Pruduction…

Linux19 --- 线程同步、用户级和内核级线程、互斥锁、信号量、读写锁、条件变量

一、线程同步 线程同步指的是当一个线程在对某个临界资源进行操作时&#xff0c;其他线程都不可以对这个资源进行操作&#xff0c;直到该线程完成操作&#xff0c;其他线程才能操作&#xff0c;也就是协同步调&#xff0c;让线程按预定的先后次序进行运行。 线程同步的方法有…