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];
        int leftProduct = 1;
        int rightProduct = 1;
        for(int i = 0;i<nums.length;i++){
            result[i] = leftProduct;
            leftProduct *= nums[i];
        }
         for(int i = nums.length - 1;i>=0;i--){
            result[i] *= rightProduct;
            rightProduct *= nums[i];
        }
        return result;
    }
}

  用输出数组作为O(n)的空间,第一遍从左往右遍历数组,给输出数组每一位赋值从nums[0] 到 nums[i - 1]的乘积;

               第二遍从右往左遍历数组,给输出数组每一位赋值从nums[nums.length - 1] 到 nums[i + 1]的乘积,两遍乘积乘起来就是结果。

原文地址:https://www.cnblogs.com/Stefan-24-Machine/p/10860161.html

时间: 2024-10-03 00:50:33

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

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

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

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

数组的乘积

输入一个数组,输出除当前元素外其他元素的乘积数组 一般是算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--)

除自身以外数组的乘积

给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题. 思路:乘积值应该是左边值乘以右边值.需要循环两遍,才能得到正确的结果. class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { vecto

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

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

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>

腾讯 2018 秋招精选(50 题)

AC # 题名 难度   2 两数相加  中等   4 两个排序数组的中位数  困难   5 最长回文子串  中等   7 反转整数  简单   8 字符串转整数  中等   9 回文数   简单   11 盛最多水的容器  中等   14 最长公共前缀  简单   15 三数之和   中等   16 最接近的三数之和  中等   20 有效的括号  简单   21 合并两个有序链表  简单   23 合并k个有链表  困难   26 删除排序数组中的重复项   简单   33 搜索旋转排序数组

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表

刷题篇--热题HOT 61-70

207.课程表 现在你总共有 n 门课需要选,记为 0 到 n-1.在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习? 示例 1:输入: 2, [[1,0]],输出: true,解释: 总共有 2 门课程.学习课程 1 之前,你需要完成课程 0.所以这是可能的. 示例 2:输入: 2, [[1,0],[0,1]]输出: false,解释: 总共有 2 门课程