LeetCode 238. 除自身以外数组的乘积

news2025/1/20 1:49:47

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

        使用前缀和进行解决该题,只不过与之前前缀和不同的是这个题目计算前缀和的时候不需要计算当前元素,也就是当前位置前缀和的值其实是不包含当前元素的前缀和。

        我们算出该位置的前缀和(不包含当前元素),后缀和(不包含当前元素)。然后再相乘。

解题方法

        法一:我们直接定义三个数组,一个记录最终结果,一个计算前缀和,一个计算后缀和。

        法二:只需要定义一个数组,先计算前缀和,然后使用一个变量记录后缀和与之相乘,只需要遍历的过程中乘上后缀和即可。

代码

法一

class Solution 
{
public:
    vector<int> productExceptSelf(vector<int>& nums) 
    {
        int n=nums.size();
        vector<int> answer(n),answer_front(n),answer_tail(n);
        answer_front[0]=nums[0];
        answer_tail[n-1]=nums[n-1];
        for(int i=1;i<n;i++)
        {
            answer_front[i]=answer_front[i-1]*nums[i];
        }
        for(int i=n-2;i>=0;i--)
        {
            answer_tail[i]=answer_tail[i+1]*nums[i];
        }
        for(int i=0;i<n;i++)
        {
            // 注意处理第一个元素与第二个元素
            if(i==0)
                answer[i]=answer_tail[i+1];
            else if(i==n-1)
                answer[i]=answer_front[n-2];
            else 
            answer[i]=answer_front[i-1]*answer_tail[i+1];
        }
        return answer;


    }
};

法二

class Solution 
{
public:
    vector<int> productExceptSelf(vector<int>& nums) 
    {
        int n=nums.size();

        vector<int> ret(n);
        // 先算前缀和
        // 第一个前缀和设为1,目的是为了不影响后面数据的计算
        ret[0]=1;
        // 需要注意的是我们所计算的前缀和是不包含自身的
        for(int i=1;i<n;i++)
            // 当前位置的前缀和等于上一个数的前缀和*上一个数组的元素
            ret[i]=ret[i-1]*nums[i-1];
        // 再计算后缀和
        // 使用k来记录后缀和,设为1为了不影响前边的后缀和数据
        int k=1;
        for(int i=n-2;i>=0;i--)
        {
            // 每次遍历都及时更新k
            k*=nums[i+1];
            // 更新ret[i]
            ret[i]=ret[i]*k;
        }
        // 此时数组ret中的元素就是当前元素的前缀和*后缀和
        return ret;
    }
};

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

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

相关文章

递归二进制【典中典】

洛谷 #include<iostream> #include<algorithm> using namespace std; const int N3e7; int path[N]; int n,idx;//我们使用二进制的形式来解决这个问题 //移位运算的优先级高于按位与的优先级 void dfs(int x,int st) {if(xn){path[idx]st;return;}//选----1dfs(x1…

C语言之指针进阶篇(3)

目录 思维导图 回调函数 案例1—计算器 案例2—qsort函数 关于qsort函数 演示qsort函数的使用 案例3—冒泡排序 整型数据冒泡排序 回调函数搞定各类型冒泡排序 cmp_int比较大小 cmp传参数 NO1. NO2. 解决方案 交换swap 总代码 今天我们学习指针难点之回调函数…

网站搭建从零开始(0)--域名的选择与解析

目录 确定用途 购买域名 使用可靠的注册商购买域名 想好域名关键词 检查域名是否可用 添加域名到购物车并完成购买 域名的解析 登录注册商账户 选择要配置的域名 进入DNS解析设置 添加DNS记录 保存配置 检查解析是否生效 提示 确定用途 在购买域名之前&#xf…

基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

TypeScript接口和类

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 接口 类 在 TypeScript 中&#xff0c;接口&#xff08;Interfaces&#xff09;和类&#xff08;Classes&#xff…

长尾关键词挖掘软件-免费的百度搜索关键词挖掘

嗨&#xff0c;大家好&#xff01;今天&#xff0c;我想和大家聊一聊长尾关键词挖掘工具。作为一个在网络世界里摸爬滚打多年的人&#xff0c;我对这个话题有着一些个人的感悟和见解&#xff0c;希望能与大家分享。 首先&#xff0c;让我坦白一点&#xff0c;长尾关键词挖掘工具…

零基础学前端(二)用简单案例去理解 HTML 、CSS 、JavaScript 概念

该篇适用于从零基础学习前端的小白 初学者不懂代码得含义也要坚持模仿逐行敲代码&#xff0c;以身体感悟带动头脑去理解新知识 一、导言 HTML&#xff0c;CSS&#xff0c;JavaScript 都是单独的语言&#xff1b;他们构成前端技术基础&#xff1b; &#xff08;1&#xff09;HTM…

【操作系统】进程控制

进程控制&#xff1a;创建新进程&#xff0c;撤销已有进程&#xff0c;实现进程状态转换等。 原语&#xff1a;进程控制用的程序段。执行期间不允许中断&#xff0c;用&#xff02;关中断&#xff02;和&#xff02;开中断&#xff02;指令&#xff08;特权指令&#xff09;实…

图片如何变小kb?分享最新图片压缩技巧

有时候&#xff0c;我们在上传图片时可能会遇到“图片太大&#xff0c;请压缩后再上传”的提示&#xff0c;这时就需要将图片大小进行压缩。那么&#xff0c;有哪些方法可以解决图片变小kb的问题呢&#xff1f;下面将给大家介绍三种实用的方法&#xff0c;帮助您轻松解决这个问…

Leetcode刷题_堆相关_c++版

&#xff08;1&#xff09;215数组中的第k个最大元素–中等 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O…

<C++>类和对象-中

目录 前言 一、类的6个默认成员函数 二、构造函数 2.1 概念 2.2 特性 三、析构函数 1. 概念 2. 特性 四、拷贝构造函数 1. 概念 2. 特征 五、赋值运算符重载 1. 运算符重载 2. 赋值运算符重载 六、实现一个完整的日期类 Date.h Date.cpp 总结 前言 上一节&#xff0c;我们…

【C语言】每日一题(半月斩)——day1

目录 &#x1f60a;前言 一.选择题 1.执行下面程序&#xff0c;正确的输出是&#xff08;c&#xff09; 2.以下不正确的定义语句是&#xff08; &#xff09; 3.test.c 文件中包括如下语句&#xff0c;文件中定义的四个变量中&#xff0c;是指针类型的变量为【多选】&a…

Acwing 2816. 判断子序列

Acwing 2816. 判断子序列 题目描述代码展示 题目描述 代码展示 #include<iostream>using namespace std;const int N 1e5 10;int a[N], b[N];int main() {int n , m;cin >> n >> m;for (int i 0; i < n; i ) scanf("%d", &a[i]);for (…

使用IO操作文件

一、File类操作文件或目录 1.File操作文件或目录 java.io.File 类是文件和目录 路径名 的抽象表示&#xff0c;主要用于文件和目录的创建、查找和删除等操作。 Java虚拟机中的一个 File 实例表示一个路径&#xff0c;这个路径可能对应一个文件或一个目录。 File 类的实例所表…

论文阅读 - Outlier detection in social networks leveraging community structure

目录 摘要 1. Introduction 2. Related works 3. Preliminaries 3.1. 模块化度量 3.2. Classes of outliers 3.2.1. 点异常 3.2.2. Contextual anomalies 3.2.3. Collective anomalies 3.3. Problem definition 3.4. Outliers score 4. Methodology 4.1. Proposed appr…

ESP32编译出现Cannot establish a connection to the component registry.报错

前言 &#xff08;1&#xff09;在对ESP32开发使用的时候&#xff0c;很容易踩坑&#xff0c;但是总是找不到问题所在。很多时候只能去外网查资料&#xff0c;语言不通&#xff0c;而且有墙特别的难受。就算能够找到乐鑫的工作人员询问&#xff0c;也整个过程也感觉有些许麻烦。…

Vue2电商前台项目——完成Detail详情页模块业务

Vue2电商前台项目——完成Detail详情页模块业务 Vue基础知识点击此处——Vue.js 文章目录 Vue2电商前台项目——完成Detail详情页模块业务一、项目开发步骤二、配置路由规则滚动行为1、配置路由规则2、滚动行为 三、请求详情页数据并展示数据1、写接口2、写Vuex仓库3、派发acti…

ESP32S3的ESP_LOGx()控制台输出详细介绍

前言 &#xff08;1&#xff09;接触一款新的芯片&#xff0c;第一步要么是点灯&#xff0c;要么是进行串口的输出。现在我将介绍如何快速的利用ESP32S3进行控制台的日志输出。 &#xff08;2&#xff09;对于ESP32进行日志输出还是相对简单的&#xff0c;不像其他芯片需要配置…

三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析

三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析 三维模型的轻量化压缩是一项技术挑战&#xff0c;特别是在处理复杂的3DTile格式时。下面列举了一些处理过程中可能遇到的常见问题以及相应的处理方法&#xff1a; 模型精度损失&#xff1a;在进行压缩处理时&#x…

C语言入门Day_19 初识函数

目录 1.函数的定义 2.函数的调用 3.易错点 4.思维导图 前言&#xff1a; printf()我们已经很熟悉了&#xff0c;它有一个特定的功能&#xff0c;就是在屏幕上输出一行文字。之前的课程我们都称呼printf()为一个功能&#xff0c;实际上ta在编程中有个特定的名字——函数。 …