• [leedcode 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].

    Follow up:
    Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)

    public class Solution {
        public int[] productExceptSelf(int[] nums) {
         /*   则维护当前元素左边所有元素的乘积以及右边所有元素的乘积, 相乘得到 product of array except self !
    
    
        Because we cannot use division, so assume we have two integer arrays with the same length of nums, int[] leftProd = new int[nums.length]; int[] rightProd = new int[nums.length], we store the product of all the left elements in leftProd and the product of all the right elements in rightProd, then the product of leftProd[i] and rightProd[i] will be the value we want to put into the result. take the example of num[] = {2, 4, 3, 6}, thenleftProd will be {1, 2, 8, 24} , and rightProd will be {72, 18, 6, 1}.
        
        
        维持两个数组, left[] and right[]. 分别记录 第i个元素 左边相乘的积left[i] and  右边相乘的积right[i]. 那么结果res[i]即为left[i]*right[i].     follow up 要求O(1)空间. 利用返回的结果数组, 这样可以不需要额外的空间.
    
    
        pos主要保存从右向左的乘积,比如第i项,pos代表的是i+1到len-1*/
            int[] res=new int[nums.length];
            res[0]=1;
            for(int i=1;i<nums.length;i++){
                res[i]=res[i-1]*nums[i-1];
            }
            int pos=1;
            for(int i=nums.length-1;i>=0;i--){
                res[i]=pos*res[i];
                pos*=nums[i];
            }
            return res;
        }
    }
  • 相关阅读:
    折半插入排序-ACM题
    xcode 常用快捷键
    折半插入排序-算法
    插入排序
    HTML5 data-* 自定义属性
    vertical-align属性baseline(转)
    CSS 基础点
    解决-word里无论怎么改变字体颜色,字体总是红色的
    css属性前加*号的作用
    php 函数的嵌套
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4713806.html
Copyright © 2020-2023  润新知