首页 > 其他分享 >力扣---238. 除自身以外数组的乘积

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

时间:2023-04-22 20:44:07浏览次数:43  
标签:力扣 arr 乘积 nums int 元素 --- 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 <= nums.length <= 105
-30 <= nums[i] <= 30
保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内
 

进阶:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/product-of-array-except-self
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

似乎好像是之前写过这道题。

由于题目明确要求了不能使用除法,且有可能出现除数为 0 的情况,所以不能简单的用所有元素的乘积除以当前位置元素的值来作为答案。

一个思路就是:某个位置的答案等于其左边所有元素的乘积再乘以右边所有元素的乘积。

因此具体的解题思路就是:先创建一个数组,保存每个下标左边所有元素的乘积。

然后用一个变量存储右边所有变量的乘积并从后往前遍历乘积数组,然后将乘积数组的值与该变量相乘。此时的结果即是当前位置的答案。

class Solution {
    public int[] productExceptSelf(int[] nums) {
        // 第一次遍历保存到当前为止的元素的乘积。
        int[] arr = new int[nums.length];
        arr[0] = 1;
        for (int i = 1; i < nums.length; i ++) {
            arr[i] = nums[i - 1] * arr[i - 1];
        }
        // 从后往前元素的乘积。
        int product = 1;
        for (int i = arr.length - 2; i >= 0; i --) {
            product *= nums[i + 1];
            // 当前位置的答案,等于其左边所有元素的乘积乘以右边所有元素的乘积。
            // 左边所有元素的乘积已经保存在了当前位置,右边所有元素的乘积保存在 product 中。
            arr[i] *= product;
        }
        return arr;
    }
}

 

标签:力扣,arr,乘积,nums,int,元素,---,238,数组
From: https://www.cnblogs.com/allWu/p/17343888.html

相关文章

  • DASCTF-Crypto-Sign1n
    sign1n显然能导出下面的式子:\(k\timesphi=e^3\times(WHATF-3)-1\).注意到\(phi=(p-1)\times(q-1)=n-(p+q)+1\),\(n=p\timesq\).考虑构造一元二次方程解出pq.同时考虑到\(k\times(p+q-1)<n\),代入得到:\(k\times(p+q-1)=(1-e^3\times(WHATF-3))\modn\).......
  • RuoYi-Vue 分离版 收获与总结
    https://blog.csdn.net/qq_41965731/article/details/115241184一、常量的定义以下是阿里编码规约   二、图片的base64编码https://blog.csdn.net/duola8789/article/details/78844431概述博客三、在项目启动时将一些数据提交加载到缓存中1.利用@PostConstruct......
  • 【CMU15-445 FALL 2022】Project #0 - C++ Primer
    关于参考&鸣谢课程官网CMU15445vscode/clionclang12cmake环境配置C++调试窗口显示“forstringvariable【CMU15-445数据库】bustubProject#0:Trie树实现(C++Primer)2022CMU15-445学习群——152391370前言按照课程要求,本文并不会给出实现代码,可以当做是我遇到问题的总......
  • Auto-GPT 5分钟详细部署指南
    安装conda1.下载安装miniconda3:Miniconda—condadocumentationconda是一个包和环境管理工具,它不仅能管理包,还能隔离和管理不同python版本的环境。类似管理nodejs环境的nvm工具。2.conda环境变量:新建CONDA_HOME:conda安装路径在Path中添加:%CONDA_HOME% 在Path中添加:%CO......
  • 分布式锁-Redisson
    分布式锁1、分布式锁1.1本地锁的局限性1.1.1测试代码1.1.2使用ab工具测试(单节点)1.1.3本地锁问题演示(集群情况)1.2分布式锁实现的解决方案1.3使用Redis实现分布式锁(了解即可)1.3.1编写代码1.3.2压测1.4使用Redisson解决分布式锁1.4.1实现代码1.4.1压测1.4.2可重入......
  • 通过css动画来驱动显示菜单面板的收缩-原理-不占位
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-......
  • Forest-声明式HTTP客户端框架-集成到SpringBoot实现调用第三方restful api并实现接口
    场景Forest声明式HTTP客户端API框架,让Java发送HTTP/HTTPS请求不再难。它比OkHttp和HttpClient更高层,是封装调用第三方restfulapiclient接口的好帮手,是retrofit和feign之外另一个选择。通过在接口上声明注解的方式配置HTTP请求接口。官网:Forest 代码地址:forest:声明式HTTP客户......
  • ZLMediaKit在Windows上实现Rtmp流媒体服务器以及模拟rtmp推流和http-flv拉流播放
    场景开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放:开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放_霸道流氓气质的博上面讲了ZLMediaKit在Windows上实现按需拉......
  • 设计模式-模板模式在Java中的使用示例-悍马模型制造示例
    场景设计模式-模板模式在Java中的使用示例:设计模式-模板模式在Java中的使用示上面整理了模板模式的使用示例,为加强理解特记录另一个使用示例,以下示例摘自设计模式之禅第二版。模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即......
  • RocketMQ【RocketMQ应用实战、发送异步消息、单向发送消息、顺序发送消息、顺序消费消
    目录RocketMQ应用实战RocketMQ应用实战生产者实战生产端发送同步消息publicclassSyncProducer{publicstaticvoidmain(String[]args)throwsException{//实例化消息生产者ProducerDefaultMQProducerproducer=newDefaultMQProducer("please_rename_uniq......