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

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

时间:2024-12-24 15:55:14浏览次数:6  
标签:乘积 nums 元素 len 力扣 238 数组 answer

给你一个整数数组 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 位 整数范围内

进阶:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)


代码:

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {

        int len = nums.size();

        vector<int> L(len, 0), R(len, 0), answer(len);
        int i = 0;

        L[0] = 1;
        for(i = 1; i < len; i++){
            L[i] = L[i-1] * nums[i-1];
        }

        R[len-1] = 1;

        for(i = len - 2; i >= 0; i--){
            R[i] = R[i+1] * nums[i+1];
        }

        for(i = 0; i < len; i++){
            answer[i] = L[i] * R[i];
        }

        return answer;
    }
};

解题思路:

(1)维护前缀元素乘积数组 L 和后缀元素乘积数组 R。

(2)先进行两次遍历,分别计算 L 和 R。

(3)最后一次遍历 answer[i] 计算前缀乘积 L[i] 和后缀乘积 R[i]的乘积。

标签:乘积,nums,元素,len,力扣,238,数组,answer
From: https://blog.csdn.net/m0_57879843/article/details/144674637

相关文章

  • 乘积小于K的子数组
    要解决“乘积小于k的子数组”问题,可以使用滑动窗口技术。下面是详细的步骤和思路:初始化变量:定义两个指针left和right,都初始化为0,用于表示窗口的左右边界。一个product变量初始化为1,用于存储当前窗口内的乘积。一个count变量用于记录符合条件的子数组数目。......
  • 1596. 每位顾客最经常订购的商品 - 力扣(LeetCode)
    1596.每位顾客最经常订购的商品-力扣(LeetCode)目标输入表:Productsproduct_idproduct_nameprice1keyboard1202mouse803screen6004harddisk450表:Ordersorder_idorder_datecustomer_idproduct_id12020/7/311122020/7/302232020/8/293342020/7/294152020/6/101262020/8/1......
  • 【多维DP】【准NOI难度】力扣3251. 单调数组对的数目 II
    给你一个长度为n的正整数数组nums。如果两个非负整数数组(arr1,arr2)满足以下条件,我们称它们是单调数组对:两个数组的长度都是n。arr1是单调非递减的,换句话说arr1[0]<=arr1[1]<=…<=arr1[n-1]。arr2是单调非递增的,换句话说arr2[0]>=ar......
  • 24/12/20随笔:记录一下每日力扣看到的modern c++
    3138.同位字符串连接的最小长度给你一个字符串s,它由某个字符串t和若干t的同位字符串连接而成。请你返回字符串t的最小可能长度。同位字符串指的是重新排列一个单词得到的另外一个字符串,原来字符串中的每个字符在新字符串中都恰好只使用一次。示例1:输入:s="a......
  • 力扣 不同路径
    不同路径LeetCode第62题是关于“不同路径”的问题,其描述如下:问题描述:一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,一个......
  • 除自身以外数组的乘积(前缀积+后缀积)
    给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32位 整数范围内。请 不要使用除法,且在 O(n) 时间复杂度内完成此题。 示......
  • 1264. 页面推荐 - 力扣(LeetCode)
    1264.页面推荐-力扣(LeetCode)目标输入输入:朋友关系列表 user1_iduser2_id12131423242561输入:喜欢列表user_idpage_id188223324456511633277377688输出输出:推荐页面列表recommended_page2324563377分析编写解决方案,向user_id=1的用户,推荐其朋友们喜欢的页......
  • 608. 树节点 - 力扣(LeetCode)
    608.树节点-力扣(LeetCode)目标输入输入:Treetable:idp_id121314252输出输出:idtype1Root2Inner3Leaf4Leaf5Leaf分析树中的每个节点可以是以下三种类型之一:"Leaf":节点是叶子节点。"Root":节点是树的根节点。"lnner":节点既不是叶子节点也不是根节点。编写一个解决......
  • 534. 游戏玩法分析 III - 力扣(LeetCode)
    534.游戏玩法分析III-力扣(LeetCode)目标输入输入:Activitytable:player_iddevice_idevent_dategames_played122016/3/15122016/5/26132017/6/251312016/3/20342018/7/35输出输出:player_idevent_dategames_played_so_far12016/3/1512016/5/21112017/6/251232016/3/......
  • 力扣80. 删除有序数组中的重复项 II
    给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用O(1)额外空间的条件下完成。示例1:输入:nums=[1,1,1,2,2,3]输出:5,nums=......