zoukankan      html  css  js  c++  java
  • 【LeetCode】238.Product of Array Except Self

    题目:

    Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].

    Solve it without division and in O(n).

    For example, given [1,2,3,4], return [24,12,8,6].

    题解:

      有点类似于Trapping Rain Water,从左到右遍历元素,计算该元素左方的乘积,再由右向左,计算右方乘积,同时左右两个积相乘放入result中。

    Solution 1 ()

    class Solution {
    public:
        vector<int> productExceptSelf(vector<int>& nums) {
            int n = nums.size();
            vector<int> result(n,1);
            for(int i=1; i<n; ++i) {
                result[i] = result[i-1] * nums[i-1];
            }
            int tmp = 1;
            for(int i=n-2; i>=0; --i) {
                tmp *= nums[i+1];
                result[i] *= tmp;  
            }
            return result;            
        }
    };

      比较直观的代码,维护左右两个矩阵。(from here)

    Solution 2 ()

    class Solution {
    public:
        vector<int> productExceptSelf(vector<int>& nums) {
            int n = nums.size();
            vector<int> result(n,0);
            vector<int> left(n,1), right(n,1);
            for(int i=0; i<n-1; ++i) {
                left[i+1] = left[i] * nums[i];
            } 
            for(int i=n-1; i>0; --i) {
                right[i-1] = right[i] * nums[i];
            }
            for(int i=0; i<n; ++i) {
                result[i] = left[i] * right[i];
            }
            return result;            
        }
    };

      

  • 相关阅读:
    oracle 的一点累积
    ZT: 网页的一些技巧
    ZT: WEB学习资料
    开源java
    倒序显示文本
    plsql使用之debug
    转 一些shell经验
    lpad rpad
    2018.8.19 2018暑假集训之maxnum
    2018.8.17 题解 2018暑假集训之编辑距离
  • 原文地址:https://www.cnblogs.com/Atanisi/p/6729597.html
Copyright © 2011-2022 走看看