Leetcode 除自身以外数组的乘积

news2025/2/21 23:57:50

在这里插入图片描述

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int length = nums.length;
        //一维数组 answer[]存储最终的结果
        //首先从左往右记录乘积,暂时存储到一维数组 answer[] 中
        int[] answer = new int[length];
        //先从左往右, 由于由于第一个元素左边没有元素,所以需要初始化 answer[0] = 1
        answer[0] = 1;
        for(int i = 1; i < length; i++) { //i从1开始遍历是因为answer[0]已经被固定为1了
            // i 位置上左边所有元素的乘积如何而来?
            // answer[i]代表 i 左侧所有元素的乘积(乘到nums[i-1]), 
            //那么 answer[i - 1] 是 i-1 左侧所有元素的乘积(乘到nums[i-2]),
            //再乘以nums[i - 1]就得到answer[i]
            answer[i] = nums[i - 1] * answer[i - 1]; 
        }

        //此时answer[i] 存储的是 i 之前所有元素的乘积

        //然后我们更新右侧乘积, R 代表不同元素右侧所有元素的乘积值
        int R = 1; //(i = length - 1)时 i 右侧所有元素的乘积值 R, 也是 R 的初始值
        for(int i = length - 1; i >= 0; i--) { //为什么是i>=0而不是i>0?
			//此时 answer[i] 代表 i 左侧所有元素的乘积, 乘以 i 右侧所有元素的乘积值 R 得到结果
            //此时 R 代表 nums[i + 1] 连乘到 nums[length - 1](i=length - 1时除外)
            answer[i] = answer[i] * R; 
            
            //更新 R, 相当于 R 往左前进一步, 进入下一次循环前 i 会减 1, 相当于 answer 数组左退一步。
            R = R * nums[i]; // 此时 R 才代表 nums[i] 连乘到 nums[length - 1] 
        }
        return answer;
    }
}

关于这一部分的代码,为什么循环中的终止判断条件是i >= 0,当设置i > 0会得到错误的结果。

int R = 1;
for (int i = length - 1; i >= 0; i--) {
    // Multiply answer[i] (product of elements to the left) by R (product of elements to the right)
     answer[i] = answer[i] * R;
     // Update R to include nums[i]
     R *= nums[i];
}
  • i >= 0 是必须的,因为数组的第一个元素(nums[0])同样需要乘上右侧的乘积。
  • 如果终止条件设置为 i > 0,那么 i = 0 的位置就没有被处理,从而导致错误结果。

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

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

相关文章

如何在算家云搭建RVC-WebUI(语音转换)

一、Retrieval-based-Voice-Conversion-WebUI简介 Retrieval-based-Voice-Conversion-WebUI&#xff08;简称 RVC&#xff09;模型是一个基于 VITS&#xff08;Variational Inference with adversarial learning for end-to-end Text-to-Speech&#xff09;的简单易用的语音转…

工业物联网关为工业生产数字化转型赋能-天拓四方

一、引言 在工业4.0的大背景下&#xff0c;工业物联网关成为了制造业转型升级的关键技术之一。它通过连接设备和系统&#xff0c;实现数据的实时采集、处理和传输&#xff0c;从而提升生产效率、降低成本、优化资源配置&#xff0c;并最终推动整个制造业的数字化进程。本文将详…

【AI创作组】工程方向的硕士研究生学习Matlab的路径

1. MATLAB软件概述 1.1 MATLAB发展历程 MATLAB自20世纪70年代诞生以来,已经经历了多次重要的版本更新和功能扩展。 初始版本:MATLAB的前身只是一个简单的交互式矩阵计算器,由Cleve B. Moler博士在1970年代初期开发,目的是为了方便学生和研究人员使用线性代数软件包LINPAC…

面向对象程序设计——mapの简析

1.map的定义 Key就是map底层关键字的类型&#xff0c;T是map底层value的类型&#xff0c;set默认要求Key⽀持⼩于⽐较&#xff0c;如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数&#xff0c;map底层存储数据的 内存是从空间配置器申请的。⼀般情况下&#xff0c…

在视频上绘制区域:使用Vue和JavaScript实现交互式画布

在数字时代&#xff0c;交互式媒体内容的创建和消费变得越来越普遍。特别是视频内容&#xff0c;它不仅提供了视觉信息&#xff0c;还允许用户与之互动&#xff0c;从而增强了用户体验。本文将介绍如何使用Vue.js框架和JavaScript创建一个交互式组件&#xff0c;该组件允许用户…

Dify创建自定义工具,调用ASP.NET Core WebAPI时的注意事项(出现错误:Reached maximum retries (3) for URL ...)

1、要配置Swagger using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Models;var builder WebApplication.CreateBuilder(args);builder.Services.AddCors(options > {options.AddPolicy("AllowSpecificOrigin",builder > builder.WithOrigins("…

vcruntime140_1.dll无法继续执行代码的6种解决方法

在计算机编程和软件开发中&#xff0c;我们经常会遇到各种错误和问题。其中&#xff0c;vcruntime140_1.dll无法继续执行代码是一个常见的问题。这个问题可能会导致程序崩溃&#xff0c;影响我们的工作进度。因此&#xff0c;了解这个问题的原因以及如何解决它是非常重要的。 …

LinuxC高级作业4

1.整理思维导图 2.统计家目录下.c文件的个数 #!/bin/bash# 初始化计数器 count0# 使用for循环遍历家目录下的所有文件 for file in ~/*; do# 检查文件是否以.c结尾if [[ $file *.c ]]; then# 如果是.c文件&#xff0c;则计数器加1count$((count 1))fi done# 输出结果 echo &…

AURIX单片机示例:开发入门与点亮LED

文章目录 目的模板工程Blinky_LED示例链接总结 目的 这个例程比较简单&#xff0c;主要通过这个例程来介绍 AURIX™ Development Studio(ADS) 和 iLLD 库来开发 AURIX 系列单片机一些入门的内容。一些更为基础的资料等内容可以参考下面文章&#xff1a; 《英飞凌 AURIX TriCo…

解决ArmDS Fast Models 中部分内核无法上电的问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决ArmDS Fast Models 中部分内核无法上电的问题。 2、 问题场景 在调用ArmDS的Fast Models中的Cortex-A55的模型&#xff0c;只有Core 0是上电状态&#xff0c;而Core 1处于掉电状态&#xff0c;如图2-1所示&…

使用 HFD 加快 Hugging Face 模型和数据集的下载,解决443报错

Hugging Face 提供了丰富的预训练模型和数据集&#xff0c;而且使用 Hugging Face 提供的 from_pretrained() 方法可以轻松加载它们&#xff0c;但是&#xff0c;模型和数据集文件通常体积庞大&#xff0c;用默认方法下载起来非常花时间。 本文将指导你如何使用 HFD&#xff08…

研一奖学金计划2024/9/23有感

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、需要认真上课的1.应用数理统计&#xff08;开卷考试&#xff09;2.最优化方法&#xff08;开卷考试&#xff09;3.跨文化交际&#xff08;主题演讲20课堂讨…

【C++算法】分治——快排

颜色分类 题目链接 颜色分类https://leetcode.cn/problems/sort-colors/description/ 算法原理 代码步骤 class Solution { public:void sortColors(vector<int>& nums) {int n nums.size();int i 0, left -1, right n;while(i < right){if(nums[i] 0) s…

OpenBayes 教程上新|让虚拟偶像活起来!LivePortrait 实现超逼真表情迁移

过去&#xff0c;使用单一图像生成动态视频效果需要复杂的动画技术和大量的手工操作。特别是在控制眼睛和嘴唇等细节上&#xff0c;耗时且难以实现逼真的同步效果。 LivePortrait 在最新版本中通过精确的画像编辑和视频编辑等功能&#xff0c;极大地简化了这一过程。创作者可以…

spring 代码执⾏ (CVE-2018-1273)

开启环境后访问 IP/users 抓包修改加上 poc &#xff1a; username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("t ouch /tmp/crz")]&password&repeatedPassword 回到kali docker exec -it 自己的id /bin/bash 反弹shel…

[spring]MyBatis介绍 及 用MyBatis操作简单数据库

文章目录 一. 什么是MyBatis二. MyBatis操作数据库步骤创建工程创建数据库创建对应实体类配置数据库连接字符串写持久层代码单元测试 三. MyBatis基础操作打印日志参数传递增删改查 四. MyBatis XML配置文件配置链接字符串和MyBatis写持久层代码方法定义Interface方法实现xml测…

摩尔-彭罗斯伪逆(pinv)

摩尔-彭罗斯伪逆是一种矩阵&#xff0c;可在不存在逆矩阵的情况下作为逆矩阵的部分替代。此矩阵常被用于求解没有唯一解或有许多解的线性方程组。 对于任何矩阵 A 来说&#xff0c;伪逆 B 都存在&#xff0c;是唯一的&#xff0c;并且具有与 A’ 相同的维度。如果 A 是方阵且非…

fastson与jackson重点笔记(包入门)

一&#xff0c;简介 json: JavaScript Object Notation, JS对象简谱。 官网&#xff1a;JSON官网 二&#xff0c;使用场景 网络传输 ​ 描述同样的信息&#xff0c;json相比xml占用更少的空间, <?xml version"1.0" encoding"uTF-8"?> <pers…

S32K3 工具篇8:如何移植RTD MCAL现有demo到其他K3芯片

S32K3 工具篇8&#xff1a;如何移植RTD MCAL现有demo到其他K3芯片 一&#xff0c;文档简介二 &#xff0c;平台以及移植步骤2.1 平台说明2.2 移植步骤2.2.1 拷贝工程并配置2.2.1.1 拷贝工程2.2.1.2 配置工程 2.2.2 EB 工程配置 三&#xff0c; 命令行编译及其结果测试四&#x…

【学习笔记】Linux系统基础知识3 —— cd命令详解

一、前期准备 1.已经正确安装并成功进入Linux系统 说明&#xff1a;本实验采用的 Redhat 系统&#xff08;因系统不一致&#xff0c;可能部分显示存在差异&#xff09; 二、学习内容 提示&#xff1a;学习Linux系统基础命令 cd 命令详解 1、cd命令 1. 功能说明 cd 命令用…