zoukankan      html  css  js  c++  java
  • leetcode238- Product of Array Except Self- medium

    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.)

    两个数组,一个存从最左边直到前一个数字的乘积,一个从最右边直到后一个数字的乘积。最后的答案就是这两个数组对应位置相乘。

    空间优化,可以直接左边一次把第一个数组乘到最终结果里,右边扫一次把第二个数组乘到最终结果里。

    1.空间优化后

    class Solution {
        public int[] productExceptSelf(int[] nums) {
            
            if (nums == null || nums.length == 0) {
                return new int[0];
            }
            
            int product = 1;
            int[] result = new int[nums.length];
            
            for (int i = 0; i < nums.length; i++) {
                result[i] = product;
                product *= nums[i];
            }
            
            product = 1;
            for (int i = nums.length - 1; i >= 0; i--) {
                result[i] *= product;
                product *= nums[i];
            }
            
            return result;
        }
    }

    2.空间优化前

    class Solution {
        public int[] productExceptSelf(int[] nums) {
            
            if (nums == null || nums.length == 0) {
                return new int[0];
            }
            
            int[] forward = new int[nums.length];
            int[] backward = new int[nums.length];
            int[] result = new int[nums.length];
            
            forward[0] = 1;
            for (int i = 1; i < nums.length; i++) {
                forward[i] = forward[i - 1] * nums[i - 1];
            }
            backward[nums.length - 1] = 1;
            for (int i = nums.length - 2; i >= 0; i--) {
                backward[i] = backward[i + 1] * nums[i + 1];
            }
            
            for (int i = 0; i < nums.length; i++) {
                result[i] = forward[i] * backward[i];
            }
            return result;
        }
    }
  • 相关阅读:
    小团队Git协作管理
    android用MediaCodeC将opengl绘制内容录制为一个mp4
    非对称加密算法RSA 学习
    .obj 和 .mtl格式详解
    “m3u8格式简析”与“视频秒开优化”
    Jenkins Android打包(Mac平台)
    java引用Arcface,实现人脸识别(demo)
    ArcFace Demo [Android]
    C# ArcFace 免费人脸识别 2.0 demo
    [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7839179.html
Copyright © 2011-2022 走看看