除自身以外数组的乘积

给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

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

思路:乘积值应该是左边值乘以右边值。需要循环两遍,才能得到正确的结果。

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

        vector<int> result(nums.size(),1);
        int left = 1, right = 1;
        for(int  i= 0; i < nums.size(); i++){
            result[i] *= left;
            left *= nums[i];

            result[nums.size()-1-i] *= right;
            right *= nums[nums.size()-1-i];
        }

        return result;

    }
};

原文地址:https://www.cnblogs.com/Shinered/p/11419896.html

时间: 2024-10-02 06:49:32

除自身以外数组的乘积的相关文章

数组的乘积

输入一个数组,输出除当前元素外其他元素的乘积数组 一般是算left,right数组然后相乘,时间复杂度o(n),空间复杂度o(n) 好的方法如下 int *cal(int *input,int n) { int i; int *result = new int [n]; result[0] = 1; for(i=1;i < n;i++) result[i]=result[i-1] * input[i-1]; result[0]=input[n-1]; for(i=n-2;i > 0;i--)

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

给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题. class Solution { public int[] productExceptSelf(int[] nums) { int[] result = new int[nums.length]

第238题:除自身以外数组的乘积

一. 问题描述 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题. 进阶: 你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间) 二. 解题思路 本题思路:本题采用双指针的方式进行求解,由于题目要求请

leetcode腾讯精选练习之除自身以外数组的乘积(十)

最长公共前缀 题目 给定长度为?n?的整数数组?nums,其中?n > 1,返回输出数组?output?,其中 output[i]?等于?nums?中除?nums[i]?之外其余各元素的乘积. 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在?O(n) 时间复杂度内完成此题. 思路 第一种思路O(n2):但是不符合题目要求 两层循环遍历,思路很简单不详细说了第一层遍历数组中中的每个数,第二层遍历求解除了本身之外的乘积. 第二种思路就是除法:也不符合

leecode 238除自身以外数组的乘积

class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { //用除法必须要考虑元素为0的情况,用双重循环要考虑数组过大超时的情况 //双指针双vector O(n)time O(n) space int n=nums.size(); vector<int> frombegin(n+1,0); vector<int> fromend(n+1,0); vecto

leecode第二百三十八题(除自身以外数组的乘积)

class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int len=nums.size(); vector<int> res; for(int i=0,temp=1;i<len;i++)//把前面的乘起来,暂存起来 { res.push_back(temp); temp=temp*nums[i]; } for(int i=len-1,temp=1;i>

Maximum Product Subarray 求最大子数组乘积

这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的时候,遇到0,不会改变最大值,遇到负数,也只是会减小最大值而已.而在求最大子数组乘积的问题中,遇到0会使整个乘积为0,而遇到负数,则会使最大乘积变成最小乘积,正因为有负数和0的存在,使问题变得复杂了不少.. 比如,我们现在有一个数组[2, 3, -2, 4],我们可以很容易的找出所有的连续子数组,[2], [3], [-2], [4], [2, 3], [3, -2], [-2, 4], [2,

713. 乘积小于K的子数组

给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]. 需要注意的是 [10,5,2] 并不是乘积小于100的子数组. 说明: 0 < nums.length <= 50000 0 < nums[i] < 1000 0 <

leetcode-713 乘积小于k的数组

leetcode-713 乘积小于k的数组 参考:负雪明烛 题目描述: 给定一个正整数数组 nums.找出该数组内乘积小于 k 的连续的子数组的个数. 注:这题和209题比较类似,但是在while判断的时候需要考虑一下 class Solution(object): def numSubarrayProductLessThanK(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int "&