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

力扣HOT100之普通数组:238. 除自身以外数组的乘积


这道题不能使用除法,我第一时间想到用前缀表和后缀表来解决,假设数组nums的长度为n,我们直接定义前缀表pre和后缀表suf,其中pre[i] = pre[i - 1] * nums[i - 1] = nums[0] * nums[1] * ... * nums[i - 1] ,而suf[j] = suf[j + 1] * nums[j + 1] = nums[n - 1] * nums[n - 2] * ... * nums[j + 1] ,所以返回的向量result中,result[i] = pre[i] * suf[i],其中特别要注意的是,前缀表pre的长度为n pre[0] = 1,而后缀表的长度为nsuf[n - 1] = 1,一共需要三次线性遍历,时间复杂度为O(n)。

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        vector<int> result;
        vector<int> pre(nums.size(), 1);  //前缀乘积
        vector<int> suf(nums.size(), 1);      //后缀乘积
        for(int i = 1; i < pre.size(); ++i)  //构造前缀乘积表
            pre[i] = pre[i - 1] * nums[i - 1];
        for(int i = suf.size() - 2; i >= 0; --i) //构造后缀乘积表
            suf[i] = suf[i + 1] * nums[i + 1];
        for(int i = 0; i < nums.size(); ++i)
            result.emplace_back(pre[i] * suf[i]);
        return result;
    }
};

看了下灵神的题解,他的思路和我一样,也是用前后缀来做的,这里就不再赘述了。

相关文章:

  • Pydantic Schema生成指南:自定义JSON Schema
  • Nginx RTMP 网络调用模块 (ngx_rtmp_netcall_module) 详细分析
  • Spring Boot 集成实战:AI 工具如何自动生成完整微服务模块
  • 解决 Gin Web 应用中 Air 热部署无效的问题
  • 力扣 --2712. 使所有字符相等的最小成本
  • 10:00面试,10:08就出来了,问的问题有点变态。。。
  • Chrome 开发环境快速屏蔽 CORS 跨域限制!
  • 小型水库大坝安全及水雨情监测技术方案
  • TypeScript三斜线指令深度解析:原理剖析与实战指南
  • 【JavaScript】筑基期功法——流程控制
  • 数据库操作以及字段类型讲解
  • Cudann 11.8同时安装tensorflow, pytorch
  • 云资源开发学习应用场景指南,场景 2:云桌面实验室
  • Spring Boot 3虚拟线程的使用
  • 【树莓派Pico FreeRTOS】-Mutex(互斥体)
  • 爬虫问题整理(2025.3.27)
  • linux0.11内核源码修仙传第十章——进程调度始化
  • Retinexformer:基于 Retinex 的单阶段 Transformer 低光照图像增强方法
  • 【消息队列】几个mq组件的对比: redis stream/rabbitmq/rocketmq/kafka
  • 【Python网络编程基础】
  • 鸡泽专业做网站/活动推广方案策划
  • 泉山徐州网站开发/国外网络推广
  • 安徽省六安市建设工程信息网/四川seo技术培训
  • 重庆公司名字查重系统/手机优化大师下载安装
  • dw怎么做滚动视差的网站/google app下载
  • 官方网站建设思路/网络营销专业毕业论文