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

leetcode Top100 238. 除自身以外数组的乘积|数组系列

题目链接:238. 除自身以外数组的乘积 - 力扣(LeetCode)

238. 除自身以外数组的乘积|数组系列

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

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

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

示例 1: 输入: nums = [1,2,3,4]          输出: [24,12,8,6]

示例 2: 输入: nums = [-1,1,0,-3,3]         输出: [0,0,9,0,0]

解题思路:

题目中给出前缀和后缀的乘积 那该题十有八九就和前缀后缀有关 

题意给出的输出[24,12,8,6] 可以拆分为 [1*2*3*4, 1*3*4 ,1*2*4, 1*2*3]

再整理一下 [2*3*4, 1*3*4 ,1*2*4, 1*2*3] 可以看出是除去本身数字来实现 

所以可以先计算前缀乘积 [1, 1*1, 1*1*2, 1*1*2*3] = [1,1,2,6]

后缀乘积[2*3*4,3*4,4,1] = [24,12,4,1]

那么 前后缀乘积相乘就是所求输出 [24,12,8,6]

Java代码:

class soul{public int[] productExceptSelf(int[] nums){if(nums == null || nums.length == 0){//剪枝return null;}int n = nums.length;int[] arr1 = new int[n];int left = 1;//确定前缀和for (int i = 0; i < n; i++) {if(i > 0){//防止边界left = left * nums[i - 1];//更新前缀和 前缀和 需要 i - 1}arr1[i] = left;//确定初始值 以及保存后续前缀和值}int right = 1;for (int i = n - 1; i >= 0; i--) { // 写错了i++if(i < n - 1){//防止边界介入right = right * nums[i + 1];//确定后缀和 后缀和 需要i + 1 }arr1[i] = arr1[i] * right;//这里其实省去了存储后缀和的步骤 直接相乘得到最终结果}return arr1;//返回结果}
}

相关文章:

  • 【Ragflow】27.RagflowPlus(v0.4.1):小版本迭代,问题修复与功能优化
  • 高保真组件库:单选复选
  • 为什么需要Redis分布式锁?在哪些微服务场景下会用到?
  • 【C/C++】namespace + macro混用场景
  • 解决SQL Server SQL语句性能问题(9)——SQL语句改写(2)
  • gitee....
  • split方法
  • 如果在main中抛出异常,该如何处理
  • 2.1.3_1 编码和调制(上)
  • 联邦学习在各领域的落地应用
  • 【GPT模型训练】第一课:安装PyTorch环境
  • Python-Flask
  • Learning Smooth Humanoid Locomotion through Lipschitz-Constrained Policies
  • Visio粘贴Word公式技巧
  • 动态工作流:目标结构来自外部数据集
  • MySQL 故障排查:从 `SHOW PROCESSLIST` 到死锁检测的完整流程
  • 博图 SCL 编程技巧:灵活实现上升沿与下降沿检测案例分享(上)
  • Context API 应用与局限性
  • STM32的DMA简介
  • Secs/Gem第九讲(基于secs4net项目的ChatGpt介绍)
  • 一般给公司做网站怎么收费/软文投稿平台有哪些
  • 免费建网站那个好/东莞网络营销信息推荐
  • 招才猫网站多少钱做的/快排seo
  • mugeda做网站/优就业seo课程学多久
  • 网站建设优化外包/效果好的关键词如何优化
  • 产品开发软件/长沙seo优化服务