力扣刷题Days30-238. 除自身以外数组的乘积(js)

news2024/11/24 3:09:58

目录

1,题目

2,代码

2.1左右乘积列表

2.2优化-空间复杂度常量化

算法实现:

3,学习与总结

3.1记录我的思考过程

3.2本题特点


1,题目

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

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

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

2,代码

2.1左右乘积列表

维护给定索引处的数字相对应的前缀和后缀;重点在于理解两个列表的初始化过程;

前缀:给定索引左侧所有数字的乘积;

后缀:给定索引右侧所有数字的乘积;

小tips:乘积 利用‘1’;

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    const n = nums.length;
    let ltable = new Array(n).fill(1);
    let rtable = new Array(n).fill(1);
    let ans = new Array(n).fill(0); 
    for(let i = 1;i < n;i++){
        ltable[i] = ltable[i-1]*nums[i-1];
    }
     for(let i = n-2; i >= 0;i--){
        rtable[i] = rtable[i+1]*nums[i+1];
     }
     for(let i = 0;i < n;i++){
        ans[i] = ltable[i]*rtable[i];
    }

    return ans;

};

2.2优化-空间复杂度常量化

由于输出数组不算在空间复杂度内,那么我们可以将 L 或 R 数组用输出数组来计算。先把输出数组当作 L 数组来计算,然后再动态构造 R 数组得到结果。

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    const n = nums.length;
    let ans = new Array(n).fill(1);
    
    for(let i = 1;i < n;i++){
        ans[i] = ans[i-1]*nums[i-1];
    }
    // R索引右侧所有数字的乘积
    let R = 1;
    for(let i = n-1; i >= 0;i--){
        ans[i] = ans[i] * R;
        R *= nums[i];
    } 

    return ans;

};
算法实现:
  1. 初始化 ans数组,answer[i] 先代表的是 i 左侧所有数字的乘积。
  2. 用一个遍历来跟踪右边元素的乘积。并更新数组answer[i]=answer[i]∗R。

说明:

R 更新为 R=R∗nums[i]

变量 R表示的就是索引右侧数字的乘积。

3,学习与总结

3.1记录我的思考过程

(1)积累一下对数组中0个数的统计

    const str = nums.join('');
    const n = (str.split('0')).length-1;

(2)我的思路

算出数组中所有数字的乘积,除以相对应索引值;

首先,判断0的个数numsOfzero

numsOfzero >= 2

numsOfzero === 1

numsOfzero === 0

问题在于numsOfzero 等于1或者0的情况需要单独处理,整体代码的实现相对繁琐;

3.2本题特点

要学习处理的方法;

了解处理思路后,可以自己实现代码逻辑,即主要在于解题思路上;


勉励自己:贵在坚持!

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

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

相关文章

用Servlet实现一个简单的表白墙

1. 准备工作 创建项目,引入依赖...... 将静态页面放到项目中(放在webapp目录下): 当前,这个表白墙页面,已经可以输入内容,点击提交之后也能显示内容,后续后端要做的工作即: ①存档 用户点提交的时候,把刚才输入的内容通过网络传输给服务器,由服务器保存这个数据. ②读档 …

什么是EDM邮件推广营销?

电子邮件作为最古老的互联网沟通工具之一&#xff0c;凭借其无可比拟的直达性、个性化潜力与高投资回报率&#xff0c;始终占据着企业营销策略的核心地位。随着人工智能技术的革新应用&#xff0c;云衔科技以其前瞻视野与深厚技术底蕴&#xff0c;倾力打造了一站式智能EDM邮件营…

标定系列——预备知识-OpenCV中相机标定相关函数(十一)

标定系列——预备知识-OpenCV中相机标定相关函数&#xff08;十一&#xff09; 说明记录 说明 对相机标定过程中使用的函数进行记录 记录

Dual Relation Knowledge Distillation for Object Detection用于目标检测的双关系知识蒸馏

摘要 有两个关键点导致检测任务的蒸馏性能不佳。一是前景和背景特征严重不平衡&#xff0c;二是小对象缺乏足够的特征表示。为了解决上述问题&#xff0c;我们提出了一种新的知识蒸馏方法——双关系知识蒸馏&#xff08;DRKD&#xff09;&#xff0c;包括逐像素关系蒸馏和逐实…

鸿蒙Lottie动画-实现控制动画的播放、暂停、倍速播放、播放顺序

介绍 本示例展示了lottie对动画的操作功能。引入Lottie模块&#xff0c;实现控制动画的播放、暂停、倍速播放、播放顺序、播放到指定帧停止或从指定帧开始播放、侦听事件等功能&#xff0c;动画资源路径必须是json格式。 效果预览 使用说明&#xff1a; 进入页面默认开始201…

【Python刷题】将有序数组转换为二叉搜索树

问题描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 高度平衡的意思是&#xff1a;二叉树是一颗满足“每个结点的左右两个子树的高度差的绝对值不超过1”的二叉树。 示例 1&#xff1a; 输入&#xf…

MVC与三层架构理解

1. JSP的发展 早期只有Servlet&#xff0c;只能使用response输出标签数据&#xff0c;非常麻烦后来。JSP的出现&#xff0c;简化了 Servlet的开发。但是过度的使用JSP&#xff0c;在JSP中写大量的java代码&#xff0c;又前端的页面&#xff0c;造成难以维护&#xff0c;难于分…

pytorch-tpu/llama推理优化之input prompt bucketing

数据更新&#xff1a; python脚本&#xff08;注意分支&#xff09;&#xff1a; HLO图分析KV-Cache更新&#xff1a; KV-Cache作为HLO图的输入输出&#xff1a;bf16[1,2048,32,128]{3,2,1,0} 128x, 2x32x2 参考链接 notes for transformer introduction by an Italian t…

HUAWEI 华为交换机 配置 Eth-Trunk 接口流量本地优先转发示例(堆叠)

组网需求 说明 S5720I-10X-PWH-SI-AC 和 S5720I-6X-PWH-SI-AC 不支持此配置。 如 图 3-23 所示&#xff0c;为了增加设备的容量采用设备堆叠技术&#xff0c;将 Switch3 和 Switch4通过专用的堆叠电缆链接起来&#xff0c;对外呈现为一台逻辑交换机。为了实现设备间的备份、…

四、MySQL数据库基础(约束详解!)

一、约束 &#xff08;一&#xff09;约束概述 1.概念:约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3。分类&#xff1a; 注意:约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添…

OpenHarmony实战开发-如何使用rating组件实现星级打分功能。

介绍 本篇Codelab将引导开发者使用rating组件实现星级打分功能。 相关概念 rating组件&#xff1a;评分条&#xff0c;可根据用户判断进行打分。 环境搭建 软件要求 DevEco Studio版本&#xff1a;DevEco Studio 3.1 Release及以上版本。OpenHarmony SDK版本&#xff1a;A…

vuepress-theme-hope 添加谷歌统计代码

最近做了个网站,从 cloudflare 来看访问量,过去 30 天访问量竟然有 1.32k 给我整懵逼了,我寻思不应该呀,毕竟这个网站内容还在慢慢补充中,也没告诉别人,怎么就这么多访问?搜索了下, cloudflare 还会把爬虫的请求也就算进来,所以数据相对来说就不是很准确 想到了把 Google An…

css酷炫边框

边框一 .leftClass {background: #000;/* -webkit-animation: twinkling 1s infinite ease-in-out; 1秒钟的开始结束都慢的无限次动画 */ } .leftClass::before {content: "";width: 104%;height: 102%;border-radius: 8px;background-image: linear-gradient(var(…

稀碎从零算法笔记Day36-LeetCode:H指数

有点绕的一个题&#xff0c;题目描述的有点奇怪&#xff08;可以看下英文&#xff1f;&#xff09; 题型&#xff1a;数组、模拟 链接&#xff1a;274. H 指数 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个整数数组 citations &am…

如何查找局域网内连接设备的IP地址?

如何查找局域网内连接设备的IP地址? 第一种方法:通过CMD指令 在电脑开始菜单中找到运行,点击打开,输入CMD,然后回车,如下图所示, 如下图所示,输入ipconfig/all,然后回车, 如下图所示,此时会扫描出所有的连接设备的IP地址、MAC地址以及网关等信息, 这时候在cmd命令窗…

php反序列化漏洞——phar反序列化漏洞

一.什么是phar文件 类比java语言 JAR是开发Java程序一个应用&#xff0c;包括所有的可执行、可访问的文件&#xff0c;都打包进了一个JAR文件里使得部署过程十分简单。 PHAR("Php ARchive")是PHP里类似于JAR的一种打包文件 对于PHP 5.3 或更高版本&#xff0c;Ph…

前端常用代码整理— js,jquery篇(3)

目录 1.判断是否是json字符串 2.获取当前网址 3.将文本复制到剪贴板 4.获取一个月的天数 5.展平数组 6.要修改getRandomItem函数以返回数组中的随机两个元素&#xff0c;可以尝试以下代码 1.判断是否是json字符串 const isJson str > {try {JSON.parse(str);return …

STM32之HAL开发——QSPI协议介绍

QSPI协议 OSPI是Oueued SPl的简写&#xff0c;是Motorola公司推出的 SPI接口的扩展&#xff0c;比SPI应用更加广泛。在 SPI协议的基础上&#xff0c;Motorola公司对其功能进行了增强&#xff0c;增加了队列传输机制&#xff0c;推出了队列串行外围接口协议(即 OSPI协议)。OSPI…

微服务(基础篇-008-es、kibana安装)

目录 05-初识ES-安装es_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p81&vd_source60a35a11f813c6dff0b76089e5e138cc 1.部署单点es 1.1.创建网络 1.2.加载镜像 1.3.运行 2.部署kibana 2.1.部署 2.2.DevTools 3.安装IK分词器 3.1.在线安装ik…

机器学习 - 手动实现 ReLU 和 Sigmoid

直接上代码 import torch import matplotlib.pyplot as pltA torch.arange(-10, 10, 1, dtypetorch.float(32)) def relu(x):return torch.maximum(torch.tensor(0), x) plt.plot(relu(A))结果如下&#xff1a; import torch import matplotlib.pyplot as pltA torch.aran…