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

    分析

    给定一个数组序列,得到一个新的数组,新数组的output[i]位置元素值等于原数组中除了nums[i]外所有其他元素的乘积。

    并且要求时间复杂度为O(n)

    我们最先想到的肯定是二重循环,计算每个位置处的 output[i];但是,这样处理复杂度为O(n^2),不满足要求;

    所以采取其它方法,分为两个步骤处理:

    1. 正序循环一次,对每个i位置的元素得到ret[i] = nums[0] * nums[1] * … *nums[i-1]
    2. 倒序循环一次,对每个i位置的元素当前乘积ret[i] *= nums[i+1] … nums[sz-1]

    AC代码

    class Solution {
    public:
        vector<int> productExceptSelf(vector<int>& nums) {
            if (nums.empty())
                return vector<int>();
    
            int sz = nums.size();
            vector<int> ret(sz, 0);
    
            //对每个i位置的元素得到ret[i] = nums[0] * nums[1] * ... *nums[i-1]
            ret[0] = 1;
            for (int i = 1; i < sz; ++i)
            {
                ret[i] = ret[i - 1] * nums[i-1];
            }//for
    
            //对每个i位置的元素当前乘积ret[i] *= nums[i+1] ... nums[sz-1]
            int tmp = 1;
            for (int i = sz - 1; i >= 0; --i)
            {
                ret[i] *= tmp;
                tmp *= nums[i];
            }
            return ret;
        }
    };

    GitHub测试程序源码

  • 相关阅读:
    Otter详解
    为什么要使用Netty
    haproxy实现mysql集群负载均衡
    Mysql主从复制
    java编程思想读书笔记三(HashMap详解)
    代码界的石器时代
    补码的产生与应用
    java编程思想读书笔记二(对象的创建)
    java编程思想读书笔记一(面向对象)
    Apache VFS
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214755.html
Copyright © 2011-2022 走看看