当前位置: 首页 > news >正文

238除自身以外数组的乘积

题目链接:

https://leetcode.cn/problems/product-of-array-except-self/description/解法一:暴力解法

直接遍历一遍数组,求该数组的除该数之外的乘积,但是超时时间复杂度为n方。

    vector<int> productExceptSelf(vector<int>& nums) {//遍历数组,求i下标之前的积,求i下标之后的积vector<int>arr;for (int i = 0; i < nums.size() ; i++){int ji = 1;for (int j = 0; j < nums.size() ; j++){if (j != i){ji = ji * nums[j];}}arr.push_back(ji);}return arr;}

所以我们开始优化,前缀和可以试一下,创建arr1数组先求前缀之积,第一位特殊处理为1,

创建arr2数组求后缀之积,最后一位特殊处理。

有了前缀之积和后缀之积,进行遍历

ans[i]=arr1[i]*arr2[i];求出答案请看代码

            //先求前缀积,再求后缀积,最后相乘vector<int>arr1(nums.size());vector<int>arr2(nums.size());//特殊处理arr1的第一位和arr2的最后一位、arr2[nums.size() - 1] = 1;arr1[0] = 1;//前缀积for (int i = 1; i < nums.size(); i++){arr1[i] = arr1[i - 1] * nums[i - 1];}//后缀积for (int i = nums.size() - 2; i >= 0; i--){arr2[i] = arr2[i + 1] * nums[i + 1];}vector<int>ans;for (int i = 0; i < nums.size(); i++){ans.push_back(arr1[i] * arr2[i]);}

相关文章:

  • Go 语言 select 语句详解
  • 【STM32开发板】接口部分
  • Oracle正则表达式学习
  • LeetCode 39.组合总和:回溯法与剪枝优化的完美结合
  • Go语言常见接口设计技巧-《Go语言实战指南》
  • 题单:最大公约数(辗转相除法)
  • 数据结构之ArrayList
  • 【C/C++】面试基础题目收集
  • 基于 Three.js 的文本粒子解体效果技术原理剖析
  • 解释程序(Python)不需要生成机器码 逐行解析 逐行执行
  • java27
  • Maven概述,搭建,使用
  • 第五篇:HTTPS 与 TLS/SSL 握手原理
  • 前端面经 两栏布局
  • 逆向入门(1)
  • DFS每日刷题
  • Mac电脑上本地安装 redis并配置开启自启完整流程
  • pikachu通关教程-CSRF
  • 使用langchain实现五种分块策略:语义分块、父文档分块、递归分块、特殊格式、固定长度分块
  • 【论文阅读 | PR 2024 |ICAFusion:迭代交叉注意力引导的多光谱目标检测特征融合】
  • 刷流水兼职日结1000/专业网站seo推广
  • 织梦音乐网站程序/百度账号怎么改名字
  • 龙岗做网站的公司/中国唯一没有疫情的地方
  • 友链网站降权/广州网站seo公司
  • 做折页的网站/网络营销的主要工作有哪些
  • 网站建设设计 网络服务/免费网站收录入口