首页 > 其他分享 >除自身以外数组的乘积

除自身以外数组的乘积

时间:2023-12-04 16:56:10浏览次数:26  
标签:乘积 nums int 后缀 length 数组 以外

题解模板

难度 : 简单 | 中等 | 困难 ------------------- 用时:28分钟(第一次) ------------------- 作题日期:2023-12-04
ps: 本人理解有限,以下是自我理解,官方和大佬有更完整和详细的解析!!!

题目描述

  • 题目描述
    给你一个整数数组 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]
    
  • 提示
    2 <= nums.length <= 105
    -30 <= nums[i] <= 30
    保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内
    

代码及解析

记录前缀乘积和后缀乘积再相乘

利用L和R两个数组分别记录索引左右的前后缀的乘积,然后相乘可得答案。

力扣图解

class Solution {
    public int[] productExceptSelf(int[] nums) {
        //记录数组长度
        int length = nums.length;
        //左侧记录前缀乘积
        int[] L = new int[length];
        //右侧记录后缀乘积
        int[] R = new int[length];
        //记录答案前缀乘后缀
        int[] ans = new int[length];
        L[0] = 1;
        for (int i = 1; i < length; i++) {
            L[i] = L[i-1]*nums[i-1];
        }
        R[length-1] = 1;
        for (int i = length-2; i >=0; i--) {
            R[i] = R[i+1]*nums[i+1];
        }
        for (int i = 0; i < length; i++) {
            ans[i] = L[i]*R[i];
        }
        return ans;
    }
}

标签:乘积,nums,int,后缀,length,数组,以外
From: https://www.cnblogs.com/kckte66/p/17875350.html

相关文章

  • 代码随想录算法训练营第五天| 242.有效的字母异位词 349. 两个数组的交集 1. 两数之
    LeetCode242.有效的字母异位词题目链接: LeetCode242思路: 使用C++自带的库函数,经过排序后进行比较(使用库函数) classSolution{public:boolisAnagram(strings,stringt){if(s.length()!=t.length())returnfalse;sort(s.begin(),......
  • 秦疆的Java课程笔记:51-52 数组 什么是数组&数组的声明和创建
    51什么是数组数组是入门阶段的最后部分。数组的定义:数组是相同类型数据的有序集合。数组描述的是相同类型的若干数据,按照一定的先后次序排序组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。52数组的声明和创建首先必须声明数......
  • LeetCode643. 子数组最大平均数I
    题目描述思路:滑动窗口模板定义需要维护的变量//1.定义需要维护的变量doublesum=0;doublemax_avg=Integer.MIN_VALUE;窗口固定大小为k,所以用ifif(end-start+1==k){ sum-=nums[start]; start+=1;}方法一:classSolution{publicdouble......
  • yocto-queue 库如何实现替代数组【玩转源码】
    前言前面提到了可以使用yocto-queue库代替Array操作数组,本篇则深入源码了解一下yocto-queue是如何实现替代数组的。yocto-queue源码分析源码中的代码量相对较少,读起来会比较轻松,看似可以琢磨的点少,其实不然。代码中包含知识点主要包括类的属性、链表与数组的对比、队列、自定义迭代......
  • ABC 331 F - Palindrome Query(字符串哈希,树状数组)
    字符串哈希[OI-Wiki](字符串哈希-OIWiki(oi-wiki.org))分为两种哈希方式:以左为高位和以右为高位如果只是快速查询每个字串的哈希值,用以左为高位比较简单,即\[Hash[l...r]=Hash[1...r]-Hash[1...(l-1)]\timesbase^{r-l+1}\]但是如果有修改操作,需要将每一位的Hash值存......
  • 2302. 统计得分小于 K 的子数组数目(双指针,贡献法,子数组问题)
     枚举子数组问题,常见有固定一个点,枚举另一个端点,还有枚举中间点。本题使用双指针算法,对右端点进行枚举,每次累加[l,r]区间内,所有以右端点为结尾的子数组对答案的贡献度,也就是长度r-l+1classSolution:defcountSubarrays(self,nums:List[int],k:int)->int:......
  • react中数组的操作
    添加元素:你可以使用push方法来在数组的末尾添加一个元素,或者使用unshift方法来在数组的开头添加一个元素。你也可以使用concat方法或者扩展运算符...来合并两个数组。letarr=[1,2,3];arr.push(4);//arrisnow[1,2,3,4]arr.unshift(0);//arrisnow[0,1,2,3,......
  • PTA|C语言|数组练习题
    --------------------------------------------------------------------------------求最大值及其下标本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式:输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。输出格式:在一行......
  • 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
    977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II 977.有序数组的平方思路:分别从数组的左,右向另一侧/中间趋近,新建立一个数组接收(有序序列)(动态地在过程中接收数据)  拓展为各个任务分配工作指针,形成多指针有序数字序......
  • 代码随想训练营第五十二天(Python)| 300.最长递增子序列、674. 最长连续递增序列、718.
    300.最长递增子序列classSolution:deflengthOfLIS(self,nums:List[int])->int:iflen(nums)<=1:returnlen(nums)#dp数组代表以nums[i]结尾的最长递增子序列长度为dp[i]dp=[1]*len(nums)res=1......